740 lines
34 KiB
HTML
740 lines
34 KiB
HTML
<!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 <lib.h><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">just some</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">random</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">some</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 <lib.h><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 <lib.h><br>#include <damage_types.h><br>#include <vendor_types.h><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 <lib.h><br>#include <damage_types.h><br>#include <vendor_types.h><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 <lib.h><br>#include <damage_types.h><br>#include <vendor_types.h><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 <lib.h><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 <lib.h>
|
|
#include <armor_types.h>
|
|
#include <damage_types.h>
|
|
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 <lib.h>
|
|
#include <armor_types.h>
|
|
#include <damage_types.h>
|
|
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 <lib.h>
|
|
#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>
|