ds2.9a12/bin/
ds2.9a12/extra/
ds2.9a12/extra/crat/
ds2.9a12/extra/creremote/
ds2.9a12/extra/mingw/
ds2.9a12/extra/wolfpaw/
ds2.9a12/fluffos-2.14-ds13/
ds2.9a12/fluffos-2.14-ds13/Win32/
ds2.9a12/fluffos-2.14-ds13/compat/
ds2.9a12/fluffos-2.14-ds13/compat/simuls/
ds2.9a12/fluffos-2.14-ds13/include/
ds2.9a12/fluffos-2.14-ds13/testsuite/
ds2.9a12/fluffos-2.14-ds13/testsuite/clone/
ds2.9a12/fluffos-2.14-ds13/testsuite/command/
ds2.9a12/fluffos-2.14-ds13/testsuite/data/
ds2.9a12/fluffos-2.14-ds13/testsuite/etc/
ds2.9a12/fluffos-2.14-ds13/testsuite/include/
ds2.9a12/fluffos-2.14-ds13/testsuite/inherit/
ds2.9a12/fluffos-2.14-ds13/testsuite/inherit/master/
ds2.9a12/fluffos-2.14-ds13/testsuite/log/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/tests/compiler/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/tests/efuns/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/tests/operators/
ds2.9a12/fluffos-2.14-ds13/testsuite/u/
ds2.9a12/lib/cmds/admins/
ds2.9a12/lib/cmds/common/
ds2.9a12/lib/cmds/creators/include/
ds2.9a12/lib/daemon/services/
ds2.9a12/lib/daemon/tmp/
ds2.9a12/lib/doc/
ds2.9a12/lib/doc/bguide/
ds2.9a12/lib/doc/efun/all/
ds2.9a12/lib/doc/efun/arrays/
ds2.9a12/lib/doc/efun/buffers/
ds2.9a12/lib/doc/efun/compile/
ds2.9a12/lib/doc/efun/floats/
ds2.9a12/lib/doc/efun/functions/
ds2.9a12/lib/doc/efun/general/
ds2.9a12/lib/doc/efun/mixed/
ds2.9a12/lib/doc/efun/numbers/
ds2.9a12/lib/doc/efun/parsing/
ds2.9a12/lib/doc/hbook/
ds2.9a12/lib/doc/help/classes/
ds2.9a12/lib/doc/help/races/
ds2.9a12/lib/doc/lfun/
ds2.9a12/lib/doc/lfun/all/
ds2.9a12/lib/doc/lfun/lib/abilities/
ds2.9a12/lib/doc/lfun/lib/armor/
ds2.9a12/lib/doc/lfun/lib/bank/
ds2.9a12/lib/doc/lfun/lib/bot/
ds2.9a12/lib/doc/lfun/lib/clay/
ds2.9a12/lib/doc/lfun/lib/clean/
ds2.9a12/lib/doc/lfun/lib/clerk/
ds2.9a12/lib/doc/lfun/lib/client/
ds2.9a12/lib/doc/lfun/lib/combat/
ds2.9a12/lib/doc/lfun/lib/connect/
ds2.9a12/lib/doc/lfun/lib/container/
ds2.9a12/lib/doc/lfun/lib/corpse/
ds2.9a12/lib/doc/lfun/lib/creator/
ds2.9a12/lib/doc/lfun/lib/daemon/
ds2.9a12/lib/doc/lfun/lib/damage/
ds2.9a12/lib/doc/lfun/lib/deterioration/
ds2.9a12/lib/doc/lfun/lib/donate/
ds2.9a12/lib/doc/lfun/lib/door/
ds2.9a12/lib/doc/lfun/lib/equip/
ds2.9a12/lib/doc/lfun/lib/file/
ds2.9a12/lib/doc/lfun/lib/fish/
ds2.9a12/lib/doc/lfun/lib/fishing/
ds2.9a12/lib/doc/lfun/lib/flashlight/
ds2.9a12/lib/doc/lfun/lib/follow/
ds2.9a12/lib/doc/lfun/lib/ftp_client/
ds2.9a12/lib/doc/lfun/lib/ftp_data_connection/
ds2.9a12/lib/doc/lfun/lib/fuel/
ds2.9a12/lib/doc/lfun/lib/furnace/
ds2.9a12/lib/doc/lfun/lib/genetics/
ds2.9a12/lib/doc/lfun/lib/holder/
ds2.9a12/lib/doc/lfun/lib/id/
ds2.9a12/lib/doc/lfun/lib/interactive/
ds2.9a12/lib/doc/lfun/lib/lamp/
ds2.9a12/lib/doc/lfun/lib/leader/
ds2.9a12/lib/doc/lfun/lib/light/
ds2.9a12/lib/doc/lfun/lib/limb/
ds2.9a12/lib/doc/lfun/lib/living/
ds2.9a12/lib/doc/lfun/lib/load/
ds2.9a12/lib/doc/lfun/lib/look/
ds2.9a12/lib/doc/lfun/lib/manipulate/
ds2.9a12/lib/doc/lfun/lib/meal/
ds2.9a12/lib/doc/lfun/lib/messages/
ds2.9a12/lib/doc/lfun/lib/player/
ds2.9a12/lib/doc/lfun/lib/poison/
ds2.9a12/lib/doc/lfun/lib/position/
ds2.9a12/lib/doc/lfun/lib/post_office/
ds2.9a12/lib/doc/lfun/lib/potion/
ds2.9a12/lib/doc/lfun/lib/room/
ds2.9a12/lib/doc/lfun/lib/server/
ds2.9a12/lib/doc/lfun/lib/spell/
ds2.9a12/lib/doc/lfun/lib/torch/
ds2.9a12/lib/doc/lfun/lib/vendor/
ds2.9a12/lib/doc/lfun/lib/virt_sky/
ds2.9a12/lib/doc/lfun/lib/weapon/
ds2.9a12/lib/doc/lfun/lib/worn_storage/
ds2.9a12/lib/doc/lpc/basic/
ds2.9a12/lib/doc/lpc/concepts/
ds2.9a12/lib/doc/lpc/constructs/
ds2.9a12/lib/doc/lpc/etc/
ds2.9a12/lib/doc/lpc/intermediate/
ds2.9a12/lib/doc/lpc/types/
ds2.9a12/lib/doc/misc/
ds2.9a12/lib/doc/old/
ds2.9a12/lib/domains/
ds2.9a12/lib/domains/Praxis/adm/
ds2.9a12/lib/domains/Praxis/attic/
ds2.9a12/lib/domains/Praxis/cemetery/mon/
ds2.9a12/lib/domains/Praxis/data/
ds2.9a12/lib/domains/Praxis/death/
ds2.9a12/lib/domains/Praxis/mountains/
ds2.9a12/lib/domains/Praxis/obj/armour/
ds2.9a12/lib/domains/Praxis/obj/magic/
ds2.9a12/lib/domains/Praxis/obj/weapon/
ds2.9a12/lib/domains/Praxis/orc_valley/
ds2.9a12/lib/domains/Ylsrim/
ds2.9a12/lib/domains/Ylsrim/adm/
ds2.9a12/lib/domains/Ylsrim/armor/
ds2.9a12/lib/domains/Ylsrim/broken/
ds2.9a12/lib/domains/Ylsrim/fish/
ds2.9a12/lib/domains/Ylsrim/meal/
ds2.9a12/lib/domains/Ylsrim/npc/
ds2.9a12/lib/domains/Ylsrim/obj/
ds2.9a12/lib/domains/Ylsrim/virtual/
ds2.9a12/lib/domains/Ylsrim/weapon/
ds2.9a12/lib/domains/campus/adm/
ds2.9a12/lib/domains/campus/etc/
ds2.9a12/lib/domains/campus/meals/
ds2.9a12/lib/domains/campus/save/
ds2.9a12/lib/domains/campus/txt/ai/charles/
ds2.9a12/lib/domains/campus/txt/ai/charles/bak2/
ds2.9a12/lib/domains/campus/txt/ai/charles/bak2/bak1/
ds2.9a12/lib/domains/campus/txt/ai/charly/
ds2.9a12/lib/domains/campus/txt/ai/charly/bak/
ds2.9a12/lib/domains/campus/txt/jenny/
ds2.9a12/lib/domains/cave/doors/
ds2.9a12/lib/domains/cave/etc/
ds2.9a12/lib/domains/cave/meals/
ds2.9a12/lib/domains/cave/weap/
ds2.9a12/lib/domains/default/creator/
ds2.9a12/lib/domains/default/doors/
ds2.9a12/lib/domains/default/etc/
ds2.9a12/lib/domains/default/vehicles/
ds2.9a12/lib/domains/default/virtual/
ds2.9a12/lib/domains/default/weap/
ds2.9a12/lib/domains/town/txt/shame/
ds2.9a12/lib/domains/town/virtual/
ds2.9a12/lib/domains/town/virtual/bottom/
ds2.9a12/lib/domains/town/virtual/space/
ds2.9a12/lib/estates/
ds2.9a12/lib/ftp/
ds2.9a12/lib/lib/comp/
ds2.9a12/lib/lib/daemons/
ds2.9a12/lib/lib/daemons/include/
ds2.9a12/lib/lib/lvs/
ds2.9a12/lib/lib/user/
ds2.9a12/lib/lib/virtual/
ds2.9a12/lib/log/
ds2.9a12/lib/log/adm/
ds2.9a12/lib/log/archive/
ds2.9a12/lib/log/chan/
ds2.9a12/lib/log/errors/
ds2.9a12/lib/log/law/adm/
ds2.9a12/lib/log/law/email/
ds2.9a12/lib/log/law/names/
ds2.9a12/lib/log/law/sites-misc/
ds2.9a12/lib/log/law/sites-register/
ds2.9a12/lib/log/law/sites-tempban/
ds2.9a12/lib/log/law/sites-watch/
ds2.9a12/lib/log/open/
ds2.9a12/lib/log/reports/
ds2.9a12/lib/log/router/
ds2.9a12/lib/log/secure/
ds2.9a12/lib/log/watch/
ds2.9a12/lib/obj/book_source/
ds2.9a12/lib/obj/include/
ds2.9a12/lib/powers/prayers/
ds2.9a12/lib/powers/spells/
ds2.9a12/lib/realms/template/adm/
ds2.9a12/lib/realms/template/area/armor/
ds2.9a12/lib/realms/template/area/npc/
ds2.9a12/lib/realms/template/area/obj/
ds2.9a12/lib/realms/template/area/room/
ds2.9a12/lib/realms/template/area/weap/
ds2.9a12/lib/realms/template/bak/
ds2.9a12/lib/realms/template/cmds/
ds2.9a12/lib/save/kills/o/
ds2.9a12/lib/secure/cfg/classes/
ds2.9a12/lib/secure/cmds/builders/
ds2.9a12/lib/secure/cmds/creators/include/
ds2.9a12/lib/secure/cmds/players/
ds2.9a12/lib/secure/cmds/players/include/
ds2.9a12/lib/secure/daemon/imc2server/
ds2.9a12/lib/secure/daemon/include/
ds2.9a12/lib/secure/lib/
ds2.9a12/lib/secure/lib/include/
ds2.9a12/lib/secure/lib/net/include/
ds2.9a12/lib/secure/lib/std/
ds2.9a12/lib/secure/log/adm/
ds2.9a12/lib/secure/log/bak/
ds2.9a12/lib/secure/log/intermud/
ds2.9a12/lib/secure/log/network/
ds2.9a12/lib/secure/modules/
ds2.9a12/lib/secure/npc/
ds2.9a12/lib/secure/obj/include/
ds2.9a12/lib/secure/room/
ds2.9a12/lib/secure/save/
ds2.9a12/lib/secure/save/backup/
ds2.9a12/lib/secure/save/boards/
ds2.9a12/lib/secure/tmp/
ds2.9a12/lib/secure/upgrades/files/
ds2.9a12/lib/secure/verbs/creators/
ds2.9a12/lib/std/board/
ds2.9a12/lib/std/lib/
ds2.9a12/lib/tmp/
ds2.9a12/lib/verbs/admins/include/
ds2.9a12/lib/verbs/builders/
ds2.9a12/lib/verbs/common/
ds2.9a12/lib/verbs/common/include/
ds2.9a12/lib/verbs/creators/
ds2.9a12/lib/verbs/creators/include/
ds2.9a12/lib/verbs/rooms/
ds2.9a12/lib/verbs/rooms/include/
ds2.9a12/lib/www/client/
ds2.9a12/lib/www/errors/
ds2.9a12/lib/www/images/
ds2.9a12/lib/www/lpmuds/downloads_files/
ds2.9a12/lib/www/lpmuds/intermud_files/
ds2.9a12/lib/www/lpmuds/links_files/
ds2.9a12/win32/
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>Dead Souls Mudlib - Quick Creation System</title>
  <meta http-equiv="Content-Type"
 content="text/html; charset=ISO-8859-1">
  <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
  <link href="style.css" media="screen" rel="stylesheet" type="text/css">
  <meta name="Keywords" content="mudos,lpmud,dead souls,dead,souls,mud">
  <meta name="Description"
 content="An actively maintained MudOS driver based on Nightmare.">
</head>
<body>
<a name="top"></a>
<!-- Begin: Header -->
<div id="header">
<p id="headertext">Dead Souls - Quick Creation System</p>
</div>
<!-- End: Header -->
<h1>Index</h1>
<ul>
  <li><a href="index.html">Back to Dead Souls Homepage</a></li>
  <li><a href="#rooms">Room Creation</a></li>
  <li><a href="#npc">NPC Creation</a></li>
  <li><a href="#weapons">Weapon Creation</a></li>
  <li><a href="#armor">Armor Creation</a></li>
  <li><a href="#room_resets">Room Resets</a></li>
</ul>
<h1>QCS Described</h1>
<p>The Quick Creation System (or QCS) is a series of commands and
modules that lets you create rooms, objects, exits, and NPCs easily and
quickly. Before the QCS, if you wanted to make an orc, you would edit
the text file by hand, or copy a template file and use an editor to
manually change the lines you needed to modify. This could be a
tiresome process, as the standard editor can be a bit awkward, and
making dozens of objects this way could be real torture for beginners.</p>
<p>The QCS changes all of that. Rather than use an editor to modify
files, the QCS gives you commands that permit you to modify objects on
the fly. This means that orc creation, for example, could involve just
the following simple steps (please note "NPC" is another word for
"Mob"):</p>
<div class="inputcontainer">
<ul class="input">
  <li><span class="command">create npc new_orc</span></li>
  <li><span class="command">modify npc name orc</span></li>
  <li><span class="command">modify orc short a mean-looking orc</span></li>
  <li><span class="command">modify orc long A typical orc: nasty,
brutish, and short.</span></li>
  <li><span class="command">modify orc race orc</span></li>
</ul>
</div>
<p>And that's it. All your modifications automatically get written to
new_orc.c (usually in your area directory), and you now have an npc you
can add to a room. Adding things to rooms is just as easy. Creating
weapons, armor, and other objects are done the same way. For complete
details and examples, read the
QCS chapters in the Creators Manual. The QCS section starts in chapter
31.</p>
<h1>Example Log</h1>
<p>Below you will find an excerpt from an short building session using
Dead Souls. This should be more or less exactly what you'll see by
entering
the commands hilighted in red.</p>
<hr>
<p>The first thing we need to do is get back to our personal work room.
We can
do this using the <span class="command">home</span> command.</p>
<div class="inputcontainer">
<span class="command">home</span>
<pre>/realms/testycre/workroom<br>Testycre's workroom [e,d]<br>You are standing in the workroom of the mighty Testycre!<br>You may return to the Creators' Hall by going down.<br>A sample room is east.<br>There is a sign here you can read.<br>There is a sheet here you can read.<br>A wooden chest is here.<br></pre>
</div>
<p>Next, we move east to a sample room that is created automatically
for us.
We'll be experimenting in here.</p>
<div class="inputcontainer">
<span class="command">east<br>
</span>
<pre>/realms/testycre/area/room/sample_room<br>Sample Room [e, w]<br>This is a room you can use as a template.<br>A simple table is here.<br>A fighter is standing here.<br></pre>
</div>
<a name="rooms"></a>
<h1>Room Creation <a class="backtotop" href="#top">(Back to Top)</a></h1>
<p>This is the standard sample room. We're about to create a new room
to the north of it via the <span class="command">create</span> command.</p>
<div class="inputcontainer">
<span class="command">create room north test1</span>
<pre>It appears you have write access to this area.<br>It's a null mapping<br>Indenting file...<br>"/tmp/indent.1134436511.tmp.dat" 20 lines 330 bytes<br>Exit from ed.<br><br>You wave your hand, and a new exit appears.<br>You begin uttering a magical incantation.<br>Indenting file...<br>"/tmp/indent.1134436511.tmp.dat" 27 lines 543 bytes<br>Exit from ed.<br><br>Indenting file...<br>"/tmp/indent.1134436511.tmp.dat" 27 lines 544 bytes<br>Exit from ed.<br></pre>
</div>
<p>We can now move east to our new room. Notice how it says it's a copy
of our sample room.</p>
<div class="inputcontainer">
<span class="command">n</span>
<pre>/realms/testycre/area/room/test1<br>Copy of /realms/testycre/area/room/sample_room.c [s]<br>This is a room you can use as a template.<br>A simple table is here.<br>A fighter is standing here.<br></pre>
</div>
<p>Now we'll change the short description to avoid confusion between
our
original sample room and the newly created one. Note that a room's
short
description appears as its title or name near the top of the text when
a
user <span class="command">looks</span> at it.</p>
<div class="inputcontainer">
<span class="command">modify here short Room One</span>
<pre>Indenting file...<br>"/tmp/indent.1134436526.tmp.dat" 27 lines 515 bytes<br>Exit from ed.<br></pre>
</div>
<p>We don't need the fighter from the other room here, so we remove him
from this new room's inventory.</p>
<div class="inputcontainer">
<span class="command">delete fighter</span>
<pre>Indenting<br>file...<br>"/tmp/indent.1134436532.tmp.dat" 26 lines 507 bytes<br>Exit from ed.<br><br>/realms/testycre/area/room/test1: Ok<br>/realms/testycre/area/room/test1<br>Room One [w]<br>This is a room you can use as a template.<br>A simple table is here.<br><br>SetInventory modification complete.<br></pre>
</div>
<p>Now we'll make another room.</p>
<div class="inputcontainer">
<span class="command">create room east test2</span>
<pre>It appears you have write access to this area.<br>It's a null mapping<br>Indenting file...<br>"/tmp/indent.1134436578.tmp.dat" 20 lines 324 bytes<br>Exit from ed.<br><br>You wave your hand, and a new exit appears.<br>You begin uttering a magical incantation.<br>Indenting file...<br>"/tmp/indent.1134436578.tmp.dat" 27 lines 557 bytes<br>Exit from ed.<br><br>Indenting file...<br>"/tmp/indent.1134436578.tmp.dat" 27 lines 525 bytes<br>Exit from ed.<br></pre>
</div>
<p>We'll move east into the newly created room.</p>
<div class="inputcontainer">
<span class="command">e</span>
<pre>/realms/testycre/area/room/test2<br>Copy of /realms/testycre/area/room/test1.c [w]<br>This is a room you can use as a template.<br>A simple table is here.<br></pre>
</div>
<p>Once again, we'll rename our new room.</p>
<div class="inputcontainer">
<span class="command">modify here short Room 2</span>
<pre>Indenting file...<br>"/tmp/indent.1134436590.tmp.dat" 26 lines 499 bytes<br>Exit from ed.<br></pre>
</div>
<p>We can now set the room's long description. This will show up as the
body of the room when a player types <span class="command">look</span>.</p>
<div class="inputcontainer">
<span class="command">modify here long This is the second test room.</span>
<pre>Indenting file...<br>"/tmp/indent.1134436608.tmp.dat" 26 lines 487 bytes<br>Exit from ed.<br></pre>
</div>
<p>We don't need that table here, let's delete it.</p>
<div class="inputcontainer">
<span class="command">delete table</span>
<pre>Indenting file...<br>"/tmp/indent.1134436612.tmp.dat" 25 lines 447 bytes<br>Exit from ed.<br><br>/realms/testycre/area/room/test2: Ok<br>/realms/testycre/area/room/test2<br>Room 2 [w]<br>This is the second test room.<br>SetInventory modification complete.<br></pre>
</div>
<p>For the sake of self-assurance, we can look at the room's file to
make
sure that our modifications are actually being saved.</p>
<div class="inputcontainer">
<span class="command">more here</span>
<pre>#include &lt;lib.h&gt;<br>#include "/realms/testycre/customdefs.h"<br><br>inherit LIB_ROOM;<br><br>static void create() {<br> room::create();<br> SetClimate("indoors");<br> SetAmbientLight(30);<br> SetShort("Room 2");<br> SetLong("This is the second test room.");<br> SetExits(([<br> "west" : "/realms/testycre/area/room/test1",<br> ]));<br><br> SetItems( ([<br> "template" : "That's what this is.",<br> ]) );<br><br> SetInventory(([<br> ]));<br>}<br><br>void init(){<br> ::init();<br>}<br></pre>
</div>
<a name="npc"></a>
<h1>NPC Creation <a class="backtotop" href="#top">(Back to Top)</a></h1>
<p>Now we'll create a new NPC (Mob) called "guy". The file name will
also
be "guy".</p>
<div class="inputcontainer">
<span class="command">create npc guy</span>
<pre>I'm going to go with the appropriate area directory:<br>/realms/testycre/area/npc/guy.c<br>You wave your hand mysteriously and a generic npc materializes!<br></pre>
</div>
<p>We can <span class="command">look</span> at our new room and see
the NPC
standing there.</p>
<div class="inputcontainer">
<span class="command">l</span>
<pre>/realms/testycre/area/room/test2<br>Room 2 [w]<br>This is the second test room.<br>A generic npc is standing here.<br></pre>
</div>
<p>The first thing to do is to rename the new NPC in order to avoid
confusion. An NPC's name is what the lib refers to the NPC as.</p>
<div class="inputcontainer">
<span class="command">modify npc name guy</span>
<pre>Indenting file...<br>"/tmp/indent.1134436801.tmp.dat" 15 lines 417 bytes<br>Exit from ed.<br></pre>
</div>
<p>We can now set one or more NPC aliases, called "ids". Note that in
the
following example, we enter three different ones, all of which point to
the
same NPC. A player could <span class="command">look</span> at any of
these
IDs and get the NPC.</p>
<div class="inputcontainer">
<span class="command">modify npc id</span>
<pre>This setting takes multiple values. If you have no more values to<br>enter, then enter a dot on a blank line. To cancel, enter a single q on a blank<br>line.<br>You may now enter the next value. So far, it is blank.<br>If you're done entering values, enter a dot on a blank line.<br><span
 class="command">dude</span>
You may now enter the next value. So far, we have: ({ "dude" })
If you're done entering values, enter a dot on a blank line.
<span class="command">fellow</span>
You may now enter the next value. So far, we have: ({ "dude", "fellow"
})
If you're done entering values, enter a dot on a blank line.
<span class="command">fella</span>
You may now enter the next value. So far, we have: ({ "dude", "fellow",
"fella"
})
If you're done entering values, enter a dot on a blank line.
<span class="command">.</span>
Entries complete. Final array is: ({ "dude", "fellow", "fella" })
Indenting file...
"/tmp/indent.1134436831.tmp.dat" 19 lines 442 bytes
Exit from ed.

/realms/testycre/tmp/guy1134436805: Ok
/realms/testycre/area/npc/guy: Ok
SetId modification complete.
</pre>
</div>
<p>Now we'll set the NPCs short description, or name. Any condition
such as
"is standing here" is appended to the end of the NPC's short
description,
so don't end it with a period or any other punctuation.</p>
<div class="inputcontainer">
<span class="command">modify guy short The Dude</span>
<pre>Indenting file...<br>"/tmp/indent.1134436855.tmp.dat" 19 lines 437 bytes<br>Exit from ed.<br></pre>
</div>
<p>We'll set the long description. This is what is shown when someone
actually
looks directly at the NPC.</p>
<div class="inputcontainer">
<span class="command">modify guy long This is just some random guy</span>
<pre>Indenting file...<br>"/tmp/indent.1134436904.tmp.dat" 19 lines 408 bytes<br>Exit from ed.<br></pre>
</div>
<p>Adjectives are useful for complementing NPCs and other objects. For
example, if our guy is 'oily' or 'hairy' as described in his long
description, a player
would be able to do a <span style="">look oily guy</span> and
see the guy even if "oily" isn't in his actual name/id.</p>
<div class="inputcontainer">
<span class="command">modify guy adj</span>
<pre>This setting takes multiple values. If you have no more values to<br>enter, then enter a dot on a blank line. To cancel, enter a single q on a blank<br>line.<br>You may now enter the next value. So far, it is blank.<br>If you're done entering values, enter a dot on a blank line.<br><span
 class="command">hairy</span>
You may now enter the next value. So far, we have: ({ "just some" })
If you're done entering values, enter a dot on a blank line.
<span class="command">stinky</span>
You may now enter the next value. So far, we have: ({ "just some",
"random" })
If you're done entering values, enter a dot on a blank line.
<span class="command">oily</span>
You may now enter the next value. So far, we have: ({ "just some",
"random",
"some" })
If you're done entering values, enter a dot on a blank line.
<span class="command">.</span>
Entries complete. Final array is: ({ "just some", "random", "some" })
Indenting file...
"/tmp/indent.1134436924.tmp.dat" 19 lines 402 bytes
Exit from ed.

/realms/testycre/tmp/guy1134436912: Ok
/realms/testycre/area/npc/guy: Ok
SetAdjectives modification complete.
</pre>
</div>
<p>Let's look at our room and see if the Dude is appearing as expected.</p>
<div class="inputcontainer">
<span class="command">look</span>
<pre>/realms/testycre/area/room/test2<br>Room 2 [w]<br>This is the second test room.<br>The Dude is standing here.<br></pre>
</div>
<p>We'll check out the Dude's file and see how QCS has set up the NPC
for us.</p>
<div class="inputcontainer">
<span class="command">about dude</span>
<pre>/realms/testycre/area/npc/guy.c<br><br>#include &lt;lib.h&gt;<br><br>inherit LIB_SENTIENT;<br><br>static void create() {<br> sentient::create();<br> SetKeyName("guy");<br> SetAdjectives( ({"just some", "random", "some"}) );<br> SetId( ({"dude", "fellow", "fella"}) );<br> SetShort("The Dude");<br> SetLong("This is just some random guy.");<br> SetLevel(1);<br> SetRace("human");<br> SetClass("explorer");<br> SetGender("male");<br>}<br><br>void init(){<br> ::init();<br></pre>
</div>
<a name="weapons"></a>
<h1>Weapon Creation <a class="backtotop" href="#top">(Back to Top)</a></h1>
<p>Now we'll create a weapon for our NPC. "hammer" is the filename.</p>
<div class="inputcontainer">
<span class="command">create weapon hammer</span>
<pre>I'm going to go with the appropriate area directory:<br>/realms/testycre/area/weap/hammer.c<br>You wave your hand mysteriously and a generic weapon materializes!<br></pre>
</div>
<p>And then set the hammer's ID(s)</p>
<div class="inputcontainer">
<span class="command">modify weapon id hammer</span>
<pre>This setting takes multiple values. If you have no more values to<br>enter, then enter a dot on a blank line. To cancel, enter a single q on a blank<br>line.<br>You may now enter the next value. So far, we have: ({ "hammer" })<br>If you're done entering values, enter a dot on a blank line.<br><span
 class="command">warhammer</span>
You may now enter the next value. So far, we have: ({ "hammer",
"warhammer" })
If you're done entering values, enter a dot on a blank line.
<span class="command">.</span>
Entries complete. Final array is: ({ "hammer", "warhammer" })
Indenting file...
"/tmp/indent.1134437181.tmp.dat" 19 lines 453 bytes
Exit from ed.

/realms/testycre/tmp/hammer1134437165: Ok
/realms/testycre/area/weap/hammer: Ok
SetId modification complete.
</pre>
</div>
<p>And now we will set the weapon's name to "hammer".</p>
<div class="inputcontainer">
<span class="command">modify weapon name hammer</span>
<pre>There is no weapon here.<br><span class="command">look</span>
/realms/testycre/area/room/test2
Room 2 [w]
This is the second test room.
A generic weapon is here.
The Dude is standing here.
</pre>
</div>
<p>What's happened here is that we changed the weapon's ID before the
name.
Luckily, this is easy to fix.</p>
<div class="inputcontainer">
<span class="command">modify hammer name hammer</span>
<pre>Indenting file...<br>"/tmp/indent.1134437205.tmp.dat" 22 lines 474 bytes<br>Exit from ed.<br></pre>
</div>
<p>Now we'll look at the hammer's file to see how it looks.</p>
<div class="inputcontainer">
<span class="command">about hammer</span>
<pre>/realms/testycre/area/weap/hammer.c<br><br>#include &lt;lib.h&gt;<br>#include &lt;damage_types.h&gt;<br>#include &lt;vendor_types.h&gt;<br><br>inherit LIB_ITEM;<br><br>static void create() {<br> item::create();<br> SetKeyName("hammer");<br> SetId( ({"hammer", "warhammer"}) );<br> SetAdjectives( ({ "generic" }));<br> SetShort("a generic weapon");<br> SetLong("A weapon of indeterminate proportions.");<br> SetMass(50);<br> SetVendorType(VT_WEAPON);<br> SetClass(30);<br> SetDamageType(BLADE);<br> SetWeaponType("blade");<br><br>}<br>void init(){<br> ::init();<br>}<br></pre>
</div>
<p>We can now set the hammer's damage type to blunt for a nice crushing
effect.</p>
<div class="inputcontainer">
<span class="command">modify hammer damagetype blunt</span>
<pre>Indenting file...<br>"/tmp/indent.1134437392.tmp.dat" 22 lines 474 bytes<br>Exit from ed.<br></pre>
</div>
<p>And now set the weapon type.</p>
<div class="inputcontainer">
<span class="command">modify hammer weapontype blunt</span>
<pre>Indenting file...<br>"/tmp/indent.1134437398.tmp.dat" 22 lines 474 bytes<br>Exit from ed.<br></pre>
</div>
<p>Similarly, set the mass.</p>
<div class="inputcontainer">
<span class="command">modify hammer mass 700</span>
<pre>Indenting file...<br>"/tmp/indent.1134437414.tmp.dat" 22 lines 475 bytes<br>Exit from ed.<br></pre>
</div>
<p>We will now make the weapon require two hands to use.</p>
<div class="inputcontainer">
<span class="command">modify hammer hands 2</span>
<pre>Indenting file...<br>"/tmp/indent.1134437422.tmp.dat" 23 lines 492 bytes<br>Exit from ed.<br></pre>
</div>
<p>We'll double-check our hammer's file now to see if everything was
set.</p>
<div class="inputcontainer">
<span class="command">about hammer</span>
<pre>/realms/testycre/area/weap/hammer.c<br><br>#include &lt;lib.h&gt;<br>#include &lt;damage_types.h&gt;<br>#include &lt;vendor_types.h&gt;<br><br>inherit LIB_ITEM;<br><br>static void create() {<br> item::create();<br> SetKeyName("hammer");<br> SetId( ({"hammer", "warhammer"}) );<br> SetAdjectives( ({ "generic" }));<br> SetShort("a generic weapon");<br> SetLong("A weapon of indeterminate proportions.");<br> SetHands(2);<br> SetMass(700);<br> SetVendorType(VT_WEAPON);<br> SetClass(30);<br> SetDamageType(BLUNT);<br><br> SetWeaponType("blunt");<br>}<br><br>void init(){<br> ::init();<br>}<br></pre>
</div>
<p>Now we'll set that short description.</p>
<div class="inputcontainer">
<span class="command">modify hammer short a heavy war hammer</span>
<pre>Indenting file...<br>"/tmp/indent.1134437450.tmp.dat" 23 lines 494 bytes<br>Exit from ed.<br></pre>
</div>
<p>And our long description...</p>
<div class="inputcontainer">
<span class="command">modify hammer long This is an extremely large and
heavy hammer designed to be wielded in both hands and used to hurt
people very badly indeed.</span>
<pre>Indenting file...<br>"/tmp/indent.1134437509.tmp.dat" 23 lines 579 bytes<br>Exit from ed.<br></pre>
</div>
<p>Setting some adjectives.</p>
<div class="inputcontainer">
<span class="command">modify hammer adj</span>
<pre>This setting takes multiple values. If you have no more values to<br>enter, then enter a dot on a blank line. To cancel, enter a single q on a blank<br>line.<br>You may now enter the next value. So far, it is blank.<br>If you're done entering values, enter a dot on a blank line.<br><span
 class="command">large</span>
You may now enter the next value. So far, we have: ({ "large" })
If you're done entering values, enter a dot on a blank line.
<span class="command">heavy</span>
You may now enter the next value. So far, we have: ({ "large", "heavy"
})
If you're done entering values, enter a dot on a blank line.
<span class="command">war</span>
You may now enter the next value. So far, we have: ({ "large", "heavy",
"war" })
If you're done entering values, enter a dot on a blank line.
<span class="command">.</span>
Entries complete. Final array is: ({ "large", "heavy", "war" })
Indenting file...
"/tmp/indent.1134437531.tmp.dat" 23 lines 592 bytes
Exit from ed.

/realms/testycre/tmp/hammer1134437521: Ok
/realms/testycre/area/weap/hammer: Ok
SetAdjectives modification complete.
</pre>
</div>
<p>And finally, look at our hammer file.</p>
<div class="inputcontainer">
<span class="command">about hammer</span>
<pre>/realms/testycre/area/weap/hammer.c<br><br>#include &lt;lib.h&gt;<br>#include &lt;damage_types.h&gt;<br>#include &lt;vendor_types.h&gt;<br><br>inherit LIB_ITEM;<br><br>static void create() {<br> item::create();<br> SetKeyName("hammer");<br> SetAdjectives( ({"large", "heavy", "war"}) );<br> SetId( ({"hammer", "warhammer"}) );<br> SetShort("a heavy war hammer");<br> SetLong("This is an extremely large and heavy hammer designed to be wielded<br>  in both hands and used to hurt people very badly indeed.");<br> SetHands(2);<br> SetMass(700);<br> SetVendorType(VT_WEAPON);<br> SetClass(30);<br> SetDamageType(BLUNT);<br><br> SetWeaponType("blunt");<br>}<br><br>void init(){<br> ::init();<br>}<br></pre>
</div>
<p>It's a pretty heavy hammer, so let's make sure our guy can wield it.</p>
<div class="inputcontainer">
<span class="command">modify guy level 10</span>
<pre>Indenting file...<br>"/tmp/indent.1134437557.tmp.dat" 19 lines 403 bytes<br>Exit from ed.<br></pre>
</div>
<p>With this simple command we add the hammer to the permanent
inventory of our guy.</p>
<div class="inputcontainer">
<span class="command">add hammer to guy</span>
<pre>ob2: /realms/testycre/area/npc/guy.c<br>ob: /realms/testycre/area/weap/hammer.c<br>Please enter a command for the NPC to perform with this item. If you<br>have no such command to enter, enter the number of these items you want to add:<br><span
 class="command">wield hammer</span>
Indenting file...
"/tmp/indent.1134437569.tmp.dat" 22 lines 489 bytes
Exit from ed.

/realms/testycre/area/npc/guy: Ok
Guy wields a heavy war hammer.
SetInventory modification complete.
</pre>
</div>
<p>And now we take a look at our guy.</p>
<div class="inputcontainer">
<span class="command">exa guy</span>
<pre>This is just some random guy.<br>The male human is in top condition.<br>Guy is carrying:<br>A heavy war hammer (wielded in left hand and right hand)<br></pre>
</div>
<p>And check the guy's file.</p>
<div class="inputcontainer">
<span class="command">about guy</span>
<pre>/realms/testycre/area/npc/guy.c<br><br>#include &lt;lib.h&gt;<br><br>inherit LIB_SENTIENT;<br><br>static void create() {<br> sentient::create();<br> SetKeyName("guy");<br> SetAdjectives( ({"just some", "random", "some"}) );<br> SetId( ({"dude", "fellow", "fella"}) );<br> SetShort("The Dude");<br> SetLong("This is just some random guy.");<br> SetInventory(([<br> "/realms/testycre/area/weap/hammer" : "wield hammer",<br> ]));<br> SetLevel(10);<br> SetRace("human");<br> SetClass("explorer");<br> SetGender("male");<br>}<br><br>void init(){<br> ::init();<br>}<br></pre>
</div>
<a name="armor"></a>
<h1>Armor Creation <a class="backtotop" href="#top">(Back to Top)</a></h1>
<p>Making armor is just as easy.</p>
<div class="inputcontainer">
<span class="command">create armor helmet</span>
<pre>I'm going to go with the appropriate area directory:<br>/realms/testycre/area/armor/helmet.c<br>You wave your hand mysteriously and generic armor materializes!<br><span
 class="command">modify armor name helmet</span>
Indenting file...
"/tmp/indent.1134437645.tmp.dat" 18 lines 483 bytes
Exit from ed.

<span class="command">modify helmet id</span>
This setting takes multiple values. If you have no more values to
enter, then enter a dot on a blank line. To cancel, enter a single q on a blank
line.
You may now enter the next value. So far, it is blank.
If you're done entering values, enter a dot on a blank line.
<span class="command">helm</span>
You may now enter the next value. So far, we have: ({ "helm" })
If you're done entering values, enter a dot on a blank line.
<span class="command">headgear</span>
You may now enter the next value. So far, we have: ({ "helm",
"headgear" })
If you're done entering values, enter a dot on a blank line.
<span class="command">cover</span>
You may now enter the next value. So far, we have: ({ "helm",
"headgear",
"cover" })
If you're done entering values, enter a dot on a blank line.
<span class="command">.</span>
Entries complete. Final array is: ({ "helm", "headgear", "cover" })
Indenting file...
"/tmp/indent.1134437661.tmp.dat" 22 lines 535 bytes
Exit from ed.

/realms/testycre/tmp/helmet1134437649: Ok
/realms/testycre/area/armor/helmet: Ok
SetId modification complete.
<span class="command">modify helmet short a horned viking helmet</span>
Indenting file...
"/tmp/indent.1134437692.tmp.dat" 22 lines 544 bytes
Exit from ed.

<span class="command">modify helmet long Vikings<br>didn't really wear horned helmets into combat, but this one does look<br>formidable with its large bull horns and thick iron construction. It<br>should prove very protective.</span>
Indenting file...
"/tmp/indent.1134437772.tmp.dat" 22 lines 666 bytes
Exit from ed.
<br>
<span class="command">modify helmet adj</span>
This setting takes multiple values. If you have no more values to
enter, then enter a dot on a blank line. To cancel, enter a single q on a blank
line.
You may now enter the next value. So far, it is blank.
If you're done entering values, enter a dot on a blank line.
<span class="command">iron</span>
You may now enter the next value. So far, we have: ({ "iron" })
If you're done entering values, enter a dot on a blank line.
<span class="command">thick</span>
You may now enter the next value. So far, we have: ({ "iron", "thick" })
If you're done entering values, enter a dot on a blank line.
<span class="command">viking</span>
You may now enter the next value. So far, we have: ({ "iron", "thick",
"viking"
})
If you're done entering values, enter a dot on a blank line.
<span class="command">horned</span>
You may now enter the next value. So far, we have: ({ "iron", "thick",
"viking",
"horned" })
If you're done entering values, enter a dot on a blank line.
<span class="command">formidable</span>
You may now enter the next value. So far, we have: ({ "iron", "thick",
"viking",
"horned", "formidable" })
If you're done entering values, enter a dot on a blank line.
<span class="command">protective</span>
You may now enter the next value. So far, we have: ({ "iron", "thick",
"viking",
"horned", "formidable", "protective" })
If you're done entering values, enter a dot on a blank line.
<span class="command">.</span>
Entries complete. Final array is: ({ "iron", "thick", "viking",
"horned",
"formidable", "protective" })
Indenting file...
"/tmp/indent.1134437802.tmp.dat" 22 lines 722 bytes
Exit from ed.

/realms/testycre/tmp/helmet1134437782: Ok
/realms/testycre/area/armor/helmet: Ok
SetAdjectives modification complete.
<span class="command">about helmet</span>
/realms/testycre/area/armor/helmet.c

#include &lt;lib.h&gt;
#include &lt;armor_types.h&gt;
#include &lt;damage_types.h&gt;
inherit LIB_ARMOR;

static void create(){
 armor::create();
 SetKeyName("helmet");
 SetAdjectives( ({"iron", "thick", "viking",
"horned", "formidable",
"protective"}) );
 SetId( ({"helm", "headgear", "cover"}) );
 SetShort("a horned viking helmet");
 SetLong("Vikings didn't really wear horned helmets into combat, but this one 
 does look formidable with its large bull horns and thick iron construction. It 
 should prove very protective.");
 SetMass(50);
 SetDamagePoints(100);
 SetArmorType(A_BODY_ARMOR);
 SetProtection(BLUNT, 20);
 SetProtection(BLADE, 20);
 SetProtection(KNIFE, 20);
}

void init(){
 ::init();
}
<span class="command">modify helmet armortype helmet</span>
Indenting file...
"/tmp/indent.1134437818.tmp.dat" 22 lines 718 bytes
Exit from ed.

<span class="command">modify helmet mass 200</span>
Indenting file...
"/tmp/indent.1134437830.tmp.dat" 22 lines 719 bytes
Exit from ed.

<span class="command">modify helmet protection</span>
Your armor can protect against one or more of the following types of
damage: 
blunt, blade, knife, water, shock, cold, heat, gas, acid, magic, poison,
disease, trauma, ..

Please enter which ones your armor should protect from, one at a time.
When you are done, please type a dot on a blank line.
<span class="command">blunt</span>
You may now enter the next value. So far, we have: ({ "blunt" })
If you're done entering values, enter a dot on a blank line.
<span class="command">blade</span>
You may now enter the next value. So far, we have: ({ "blunt", "blade"
})
If you're done entering values, enter a dot on a blank line.
<span class="command">knife</span>
You may now enter the next value. So far, we have: ({ "blunt", "blade",
"knife"
})
If you're done entering values, enter a dot on a blank line.
<span class="command">trauma</span>
You may now enter the next value. So far, we have: ({ "blunt", "blade",
"knife",
"trauma" })
If you're done entering values, enter a dot on a blank line.
<span class="command">.</span>
Protections list complete.
Please enter the protection value for: BLUNT
<span class="command">15</span>
Please enter the protection value for: BLADE
<span class="command">20</span>
Please enter the protection value for: KNIFE
<span class="command">25</span>
Please enter the protection value for: TRAUMA
<span class="command">10</span>
This is where the mapping gets sent somewhere.
ProtectionsMap is: ([ "BLADE" : 20, "BLUNT" : 15, "TRAUMA" : 10,
"KNIFE" : 25 ])
Indenting file...
"/tmp/indent.1134437901.tmp.dat" 23 lines 750 bytes
Exit from ed.

<span class="command">about helmet</span>
/realms/testycre/area/armor/helmet.c

#include &lt;lib.h&gt;
#include &lt;armor_types.h&gt;
#include &lt;damage_types.h&gt;
inherit LIB_ARMOR;

static void create(){
 armor::create();
 SetKeyName("helmet");
 SetAdjectives( ({"iron", "thick", "viking",
 "horned", "formidable",
 "protective"}) );
 SetId( ({"helm", "headgear", "cover"}) );
 SetShort("a horned viking helmet");
 SetLong("Vikings didn't really wear horned helmets into combat, but this one 
 does look formidable with its large bull horns and thick iron construction. 
 It should prove very protective.");
 SetMass(200);
 SetDamagePoints(100);
 SetArmorType(A_HELMET);
 SetProtection(BLADE, 20);
 SetProtection(BLUNT, 15);
 SetProtection(TRAUMA, 10);

 SetProtection(KNIFE, 25);
}

void init(){
 ::init();
}
<span class="command">l</span>
/realms/testycre/area/room/test2
Room 2 [w]
This is the second test room.
A horned viking helmet and a heavy war hammer are here.
The Dude is standing here.

<span class="command">exa dude</span>
This is just some random guy.
The male human is in top condition.
Guy is carrying:
A heavy war hammer (wielded in left hand and right hand)

<span class="command">add helmet to dude</span>
ob2: /realms/testycre/area/npc/guy.c
ob: /realms/testycre/area/armor/helmet.c
Please enter a command for the NPC to perform with this item. If you have no
such command to enter, enter the number of these items you want to add:
<span class="command">wear helmet</span>
Indenting file...
"/tmp/indent.1134437927.tmp.dat" 23 lines 544 bytes
Exit from ed.

/realms/testycre/area/npc/guy: Ok
Guy wields a heavy war hammer.
Guy wears a horned viking helmet.
SetInventory modification complete.
<span class="command">exa dude</span>
This is just some random guy.
The male human is in top condition.
Guy is carrying:
A heavy war hammer (wielded in left hand and right hand)
A horned viking helmet (worn)
</pre>
</div>
<a name="room_resets"></a>
<h1>Adding Room Resets <a class="backtotop" href="#top">(Back to Top)</a></h1>
<p>Ok our dude is done. Let's clean up the room by updating it.</p>
<div class="inputcontainer">
<span class="command">update</span>
<pre>Updating environment<br>/realms/testycre/area/room/test2: Ok<br><span
 class="command">look</span>
/realms/testycre/area/room/test2
Room 2 [w]
This is the second test room.
<span class="command">pwd</span>
/realms/testycre:
<span class="command">cd area/npc</span>
/realms/testycre/area/npc:
</pre>
</div>
<p>We need to have the guy present in order to add him to the room:</p>
<div class="inputcontainer">
<span class="command">clone guy</span>
<pre>Guy wields a heavy war hammer.<br>Guy wears a horned viking helmet.<br>You clone The Dude (/realms/testycre/area/npc/guy.c).<br><span
 class="command">add guy to room</span>
ob2: /realms/testycre/area/room/test2.c
ob: /realms/testycre/area/npc/guy.c
Please enter the number of these that you want to add:
<span class="command">1<br></span>Indenting file...
"/tmp/indent.1134437999.tmp.dat" 26 lines 485 bytes
Exit from ed.

/realms/testycre/area/room/test2: Ok
/realms/testycre/area/room/test2
Room 2 [w]
This is the second test room.
The Dude is standing here.

SetInventory modification complete.
<span class="command">update</span>
Updating environment
/realms/testycre/area/room/test2: Ok
</pre>
</div>
<p>That's it. Easy, huh? Think of how much slogging through ed this
would save you when making a large area.
</p>
<div class="inputcontainer"><span class="command">look</span>
<pre>/realms/testycre/area/room/test2<br>Room 2 [w]<br>This is the second test room.<br>The Dude is standing here.<br><br><span
 class="command">exa dude</span>
This is just some random guy.
The male human is in top condition.
Guy is carrying:
A heavy war hammer (wielded in left hand and right hand)
A horned viking helmet (worn)

<span class="command">more here</span>
#include &lt;lib.h&gt;
#include "/realms/testycre/customdefs.h"

inherit LIB_ROOM;

static void create() {
 room::create();
 SetClimate("indoors");
 SetAmbientLight(30);
 SetShort("Room 2");
 SetLong("This is the second test room.");
 SetExits(([
 "west" : "/realms/testycre/area/room/test1",
 ]));

 SetItems( ([
 "template" : "That's what this is.",
 ]) );

 SetInventory(([
 "/realms/testycre/area/npc/guy" : 1,
 ]));
}

void init(){
 ::init();
}

<span class="command">quit</span>
Please come back another time!
</pre>
</div>
<hr>
<h1>The End <a class="backtotop" href="#top">(Back to Top)</a></h1>
<p>Obviously you still need to code some LPC in ed for complex stuff.
But knocking out rooms and NPC's and objects quickly helps you avoid
getting bogged down in mechanics when what you really want to do is
build.</p>
<a href="index.html">Return to Dead Souls Homepage</a>
</body>
</html>