<!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">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 <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>