1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959
|
Builder Port Tutorial
Introduction: This document instructs on the use of the builder port
Index
1. What is the Builder Port?
2. The Database
3. Object Types
4. Logging In and Getting Set Up
5. Loading Areas and Modifying Objects
6. Creating Markers
7. Creating Moveables
8. Creating Books
9. Creating Keys
10. Creating Locations
11. Creating Doors
12. Creating Mobiles
13. Creating Mergers
14. Creating Money
15. Creating Weapons
16. Creating Wearables
17. Creating Food
18. Creating Boats
19. Creating Ropes
20. New, Copy, Rename, and Delete
21. Non-MudObject Objects
22. Creating Spells and Skills
23. Creating Specials
24. Creating Quests
25. Creating Actions
26. Creating Levels
27. Creating Races
28. Creating Texts
29. Creating Bulletin Boards
30. Creating Inclinations
31. Creating Talents
32. Creating Chatlines
33. Using Color
34. Where do I start?
35. I want to make this do that. Can I?
1. What is the Builder Port?
The AIME code provides a separate port for all building activities.
It allows for online creation of areas and should provide the builder
an efficient method for putting their ideas onto the mud. Some may ask,
why create a separate port divided from the game port for building? We
did this to provide a functional division between building and game play.
This way, all building will be done on the builder port, and functions
specific to game play and administration can be accomplished on the game
port. To gain access to this building port you need to talk to a mud admin
to give your player the correct permissions for port access.
2. The Database
The MUD stores all information in "objects". A location is an
object that contains the location description, where the exits go,
and other data pertaining to that location. Each mobile is an object,
and each door is an object. For the most part, anything you can examine,
get, or talk to is an object. In the MUD, we call these objects MudObjects.
The MUD stores all MudObjects, along with several other types of
objects (Actions, Spells, Specials, etc.) in a series of area files. An area
file is a collection of objects, ranging from Mobiles to Doors to
Locations that have some functional connection. One example is the
Elven Forest. The entire Elven Forest is stored in the area "eforest".
The entire Camelot section is stored in an area called "camelot".
When you combine all areas together, they make up the MUD.
For those who are interested and have some knowledge of databases, all
MudObjects are stored in an area binary tree. Each area binary tree is
then stored in a mud-wide binary tree. So it is in essence a bunch of
trees in a tree. If you have no idea what I am talking about, don't
worry about it; it is not important for you to understand this to
create areas.
3. Object Types
There are many different objects that make up the MUD, each with
its own unique attributes. Markers are objects that take up a small amount
of memory, and are used for a non-moveable object that you can examine.
Doors are links between locations that can be opened, closed, locked, or
magically locked. Books are objects that, when read, will print the
contents of a file. Locations are, well, locations in the world. Keys
are objects that are used to open one or multiple doors. The key will
only work on a door if that door is specified as working for that key.
Mobiles are game people, creatures, or anything that can die. Most
mobiles you can talk to and will respond to you. Moveables are items
that you can get, but aren't usually good for anything but taking up
space. They could be an item that adds to the "feel" of an area (like
a skull head) but has no real use.
4. Logging In and Getting Set Up
In order to be able to log on, you will need to ask a game admin
to give you the proper permissions and access. Once you have been
configured for building, telnet to the builder port of the MUD and
log in with the username and password you use on the regular game port.
5. Loading Areas and Modifying Objects
On login, you will see a prompt that looks something like:
([AREA]:[MUDOBJECT]) B>
The [AREA] indicates which area you have loaded, and the [MUDOBJECT] will
indicate which MudObject you are set to modify. To modify a particular
object, you'll first need to load the area file it's in, then load the
object. For example, suppose you want to change the title of a location
called "stinky" in the area called "swamp". You would first type "load
swamp". Your prompt would then change to:
(swamp:[MUDOBJECT]) B>
<
To modify the location "stinky", you would type "modify stinky". Your prompt
would then change to:
(swamp:stinky) B>
While more than one person can modify an area at the same time, only one
player can modify a particular object at one time. While you are set to
modify "stinky", no other player can modify it.
At this point, you can view the attributes of the location "stinky".
Typing "describe" (or "desc" for short) will give you the attributes and
values of each attribute that make up the location "stinky". You will see
the title, description of the location, where the exits lead, and other
data pertinent to the location.
6. Creating Markers
Markers have several purposes. First, they provide something to
examine without letting the user know that it is there directly. An
object that you can move would normally have a brief description which
would appear to the player, like "You see a bone lying here." (We call
this a "brief".) The player will only know that a marker is there if the
builder identifies the object in the location description. For example,
the room description:
"You stand in a small room, complete with a table, chair, and a
small uncomfortable-looking bed in the corner. The dust covering the floor
indicates that nobody has been here for days."
Given this room description, you should ideally create a marker for the
table, chair, bed, and dust. That way, when the player types "examine
table", you could provide the description "A small amount of rotten food
covers the wooden surface."
A second reason that a marker would be used is to attach a 'special'
to it (this will be described in detail later). If you have a torch on a
wall, and want a wall to open when the user moves the torch, you would create
a torch marker and attach a special to it.
7. Creating Moveables
A moveable object is an object that a player can carry. In
actuality, Books, Keys, Wearables and Weapons are all Moveables, but
with added features. A Moveable is the simplest of all carryable objects.
You use this object when you want to create an object just for show,
or to attach a special. It could be a skull to create atmosphere or
a magical stone that glows when picked up. You can make moveables more
functional by adding flags to them. For example, setting the flag
'Container' will permit that object to hold other objects. So one
could create an object "bag" and set the 'Container' flag and suddenly
this object is a useful container.
8. Creating Books
Books provide a method for displaying a large amount of text
without using the massive amount of memory that storing all the text
would take. A book indicates the name of a text file, which when the
user reads the book, it displays the contents of that text file to the
user. This way, only the filename needs to be stored in memory, instead
of the entire text. Books are gettable, and provide an "examine" as
well as the file that "read" displays.
9. Creating Keys
Keys are identical in attributes to moveables. The only
difference is that you can't use a moveable to unlock or lock a door.
10. Creating Locations
Locations are the "meat" of an area. They are the rooms that
the player stands in and which contains most Markers, Moveables, and
all Mobiles. The locations contain exit pointers for each of the ten
directions, and point to either another location or a door. They also
contain location flags which define special attributes about the location.
11. Creating Doors
A door is like a mix between an object and an exit. It allows
a link to be created between two locations, and depending on the door
state, either allows passage or blocks the exit. Doors provide great
flexibility in descriptions. Each door has a separate description for
the inside and outside of the door. It also allows you to set your own
brief message depending on the door state. You set a door by first
assigning the inside and outside location of the door to the two
locations that the door will exist in. Then on both of those locations,
you set the appropriate exits to the door name. Say your door is called
"reddoor" and your two locations are called "room1" and "room2". These
attributes should be set:
Room1:
East: reddoor
Room2:
West: reddoor
Reddoor:
Outsideloc: Room1
Insideloc: Room2
This will make the door a link between those two locations.
Doors are also used when linking two rooms with a rope. You define the
door with the RopeTie itemflag and connect the door like you would any
other door. The RopeTie flag prevents players from opening the door by
normal means. They actually have to tie a rope to the door (the rope
must be long enough) to open the door. For a rope door, the brief 0 is
for when a rope is tied to the door, the brief 1 is when no ropes are tied,
and brief 2 is for when the rope is tied but not long enough. Brief 3
is not used for a rope door.
Special doors are doors that can only be opened using a special. For
instance, if you have thorns blocking a path and the player must light
the thorns to clear the path, you set up a special door and create
a pre_light special that will open the door when the thorns are lit. To
set up the door as a special door, you need to set the SpecialDoor
If you don't want the exit to show up on "exits", you need to set the
HiddenDoor itemflag. This will also prevent briefs from being shown.
12. Creating Mobiles
A mobile can be defined as any non-playing character. This can
range from creatures that want to kill you to shopkeepers that want
to sell things to you. It could include peasants, lords, and thieves.
Mobiles contain a tell/reply feature. It allows the builder to
create replies to specified keywords. When a player does a tell to a
mobile, the tell string will be searched for certain keywords. If it
finds a certain keyword that has a reply, the mobile will reply with
the specified string. In general, you will want to create a reply to
keywords "hello hi" for each friendly and some unfriendly mobiles.
This way, users can start with "tell bob hi" in order to get information
from Bob. The replies should help lead the conversation as well.
Nobody is going to know that if you tell the dragon "what about the
glove" that the dragon will tell you where the magical glove is
unless you provide a clue somewhere. An example of an effective leading
of the conversation would be:
"tell mayor hi"
Mayor replies "Welcome to my town!"
"tell mayor town"
Mayor replies "Yes, I am the mayor of this town. It isn't much but it
does survive."
"tell mayor survive"
Mayor replies "Oh yes, we have had our hard times as of late, what with
the big storm and all."
"tell mayor storm"
Mayor replies "Nearly wiped out every building! Was a devil's storm if you
ask me!"
Using this technique of leading the conversation, you can provide hints
for the players to home in on. For the most part, all keywords should
have something directing the player to them, even if it is a mobile on
the other side of the mud giving a hint. New tellreplies can be created
by typing "new reply (keywords)" and the replies can be changed
by typing "set reply (reply number)". Tell Replies can be deleted by
typing "delete reply (reply number)"
Mobiles can perform abilities much like a player can. They can also
have certain weapons they are skilled at using. These are called
proficiencies and can be assigned to a mobile using the command
"new proficiency (objname)" where objname is either the name of a
spell or skill in the abilities area, or a weapon class. When a
mobile has proficiencies assigned to it, a message will appear
when the user types "describe" indicating proficiencies exist. These
proficiencies can be viewed by typing "describe proficiency". In this
list, ProfName indicates the ability or weapon class. Rank indicates
how adept they are at using the ability or weapon. It tops out at around
40 for most abilities or weapons. Finally, probability is the probability
that each combat turn the mobile will use that ability and does not apply
to weapons. You can remove proficiencies with "delete proficiency (number)"
Mobiles can also run a shop, where the user can buy objects from
the mobile in exchange for a certain amount of money. Each shop contains
a name attribute, which the mobile will use when referring to their
shop, like "Bob's Bugs and Beetles". Also, each shop contains a currency
attribute stating the denomination of currency in which the shopkeeper
lists his prices. These currencies (whether gold, silver or copper) have
to be pre-defined MudObjects (such as gold@courtland). Shops can be
created by typing "new shop (name of shop)" and deleted by typing
"delete shop"
Each shop contains a list of shop items which consist of an alias,
an object name, and a value. The alias is the name that the shopkeeper
will use to refer to the object. The object name is the name of the
actual object. For example, the object "shortsword" could have an alias
of "sword". Theoretically, the alias and the object name could be
unrelated (ie, you could give the item an alias of sword when it is
really a rock) but this would be misleading to the player and isn't
recommended. To create a shop item, simply type "new item (alias)"
and a shop item by that name will be created. To delete a shop item,
type "delete item (alias)". The "value" is the cost of the object,
and is specified not in terms of currency but rather in terms of
the money index. To get more information on the money index and
money objects in general, see the section on Money.
Mobiles have a list of flags, called IndFlags (Individual Flags). See the
flags document for information on IndFlags and other game flags.
13. Creating Mergers
A "merger" is an object that will merge together and break apart as
needed. An example of this would be a group of arrows. If you carry
those arrows and do an inventory, you will see: arrows(10) meaning you
hold ten arrows. Actually you hold one arrow object with 10
units. If you type "drop 5 arrows", it will clone the arrows object,
set each to 5, and drop one copy of the arrows. Now you will hold in
your inventory "arrows(5)", and on the ground there will be "arrows(5)".
If you then type "get arrows", it will destroy one arrows object and
you will now hold "arrows(10)" again, because the two objects will have
been merged. Mergers can be used for any type of object that will
normally exist in multiple numbers. Money is an example, but money is
a different object that will be talked about later. Weapons ammunition
like arrows, bolts, and slingshot pellets would use mergers. Reagents
could also use mergers.
To create mergers, you create a template object which is never used
in actual gameplay. All mergers will then be generated from this template as
needed. All object types have a clone attribute where you can specify
mergers that start in that object. For example, a bow may be created
with five arrows in it. This object ability excludes actual merger
objects, since you can't place a merger within a merger. Another example
is having a merger start in a specific location. Say we create a location
called "forest1" and in that location, we set Clones = "arrows@castlezone 7".
This means that on loading of the zone, it will place an arrows(7) object
at that location.
14. Creating Money
A money object is a merger with one additional attribute: index. The index
reflects how much a single unit of that currency type is worth relative to
other currency. For example, let us create three types of money:
gold, silver and copper. We assign an index of 200 to gold, 20 to silver,
and 1 to copper. Therefore it would take 20 coppers to equal one silver,
and 10 silvers to equal one gold.
Keep in mind that if you give weight to the money, each piece of money will
weigh that much and if you give a weight of 1,200 gold will be quite heavy.
You may want to give it size but no weight.
See price.txt for a list of objects and recommended cost to use as an
approximation of how expensive you should make things when designing shops.
15. Creating Weapons
Weapons are objects that can be wielded and cause damage to others.
Weapons contain a damage attribute, which stands for the maximum damage
that the weapon can cause. The damage that is actually caused depends on
how direct the blow is, the damage of the weapon, and how heavily armored
the mobile is.
The DepStr attribute is the dependency the weapon has on the user's
strength, from 0 to 100 where 0 is not at all dependent, and 100 is
fully dependent. A lightweight sword would have a low DepStr level,
while a heavy warhammer would have a high DepStr level. DepDex is the
dependency the weapon has on the user's dexterity. A bow and arrow
may require a higher player dexterity than an axe. For both of these
attributes, if the object has a high dependency on either of these levels,
then the user should have a high level of strength or dexterity for
them to have any accuracy with the weapon. This also affects chance of
deflecting the enemy's weapon.
The weapon class is a string that defines a weapon in a certain class.
If you create a sword, you should place that in the "sword" class, and
this will allow a player who trains on "swords" to gain an advantage
with "sword" class weapons.
Weapons must be wielded in either one hand or both hands to be effective.
Some weapons, like a short sword, may only require one hand to use. Other
weapons, like a two-handed sword or a bow would require both hands. The
wield type attribute defines whether the weapon requires one or both hands
to wield.
If you set the class to a range weapon such as a bow, it will make it act
quite different. You will need to first set the container flag on the bow
and ensure the capacity is enough to fit your arrows. To limit what the
player can put in the bow, attach a special to the bow with the trigger
"preput_receptacle" and ensure the special code allows only the object types
you want, such as arrows. Here is a sample bit of code that does just that:
goto_if_eq("end", is_string_eq(get_parent_name("primary"), "arrow@global"), 1);
send_actor("You can't use that with the bow!\n");
return_invalid_criteria();
end:
When the player attacks with their bow, the mud will look for an object
inside the bow with a special attached to it with the "on_launch_hit"
trigger and will use that to fire with. It will run that special then.
An example of that code is:
send_actor("Your arrow sinks into ", get_title("primary"), "!\n");
send_room_except_dual("primary", "this", get_title("this"), "'s ",
get_title("secondary"), " sinks into ", get_title("primary"), "!\n");
send_to("primary", get_title("this"), "'s ", get_title("secondary"),
" sinks into you!\n");
set_counter(25);
decrement_number_of("secondary", 1);
goto_if_neq("end", 0, get_number_of("secondary"));
destroy_this_obj();
end:
It determines damage by what the counter is set to, hence the set_counter(25)
line which causes 25 points in damage.
16. Creating Wearables
A wearable is an object that can be placed on the body of the
player or mobile. It could be anything from clothes, jewelry,
armor, etc. A shield is considered a wearable object, but it does
not get worn per se as it is wielded. You need to set the Wielded
wearflag to make the shield wielded.
Each wearable object is a moveable object, with a few additional
attributes. The armor value is the maximum amount of damage that a
piece of armor will deflect or absorb. It does not decrease the
enemy's chance of hitting you, but it will decrease the damage
they cause if they do strike you.
Wearable objects have wearflags that indicate several attributes
of the object. First, they indicate on what part of the body an
object will be worn. An object can be worn on several parts at once.
For example, a chainmail vest would be worn on the back, chest, and
arms. The TopLayer flag indicates that this item of clothing will
always be the top layer on a body part. You can only wear one top
layer item of clothing at a time. This way, nobody can wear two
platemail items at the same time.
17. Creating Food
A food item is an item that can be consumed, and will often give
the user energy. Energy is important as it will affect how you
fight and some other game aspects. A good player will keep their
energy level high by eating food often, so that they can
perform at their optimum level. Food is a merger with one special
attribute: energy. This is a value from 0-10 that states how much
energy eating one of these pieces of food will provide to the player.
18. Creating Boats
A boat item is an item that a player can enter and will allow
that player to travel across water. It is a carryable object, but
in all actuality most boats would be tough to carry without dropping
everything so it would be wise to set the size and weight high. For
a boat to work properly, you must set the container flag and set a
capacity high enough to carry the players that you want. The
default individual size is 180, so for two players you should make
the capacity 360 or higher.
The boats do briefs a little bit differently. If the boat is on
water, the waterbrief is used. If the boat is in a shore location
(meaning that both regular players and water-dwelling mobiles or
boats can go there), then the brief0 is used. Otherwise, brief1
is used.
19. Creating Ropes
Ropes are merely moveables with one additional attribute, length.
The length attribute will define if a rope can be used in a specific
"rope door". If it is not long enough, it will not reach far enough
for the rope door.
20. New, Copying, Renaming, and Deleting
The builder port supplies methods for manipulating objects. To create an
object, the "new" command is used. The "new" command syntax is: "new
(objecttype) (objectname)". The type is either one of the object types
(like a weapon or a location), atellreply or a special. To create a new
weapon, you might type "new weapon shortsword". Each object name has to
be unique for that area. For example, you can have several weapons called
"sword" in the game, but only one per area. For tellreply, the (objectname)
is where you put the keywords for the tellreply (separated by spaces, like:
"hi hello") that will activate the reply. For instance, if you want the
mobile to reply to "hi" or "hello", you would type "new tellreply hi hello".
For copying, renaming, and deleting objects, you first need to have an object
set to modify. (See Loading Areas and Modifying Objects) To copy, the
command syntax is "copy (newname)" where (newname) is a unique name for that
area. The syntax for rename is "rename (newname)" where (newname) is a
unique name for that area. Copy and rename do not work for tellreplies or
specials. You will have to delete and recreate these.
To delete anything, you must first have an object set to modify. To delete
objects, you simply type "delete" and it will ask you if you really want
to delete this object. Say yes and the object will be deleted. It does
save the deleted object to a recovery file, so if later you decide you
didn't want to delete the object after all, let someone with site access
know and they will recover it for you. To delete tellreplies, type "delete
tellreply (number)" where the number is the one given to the tellreply
under "describe".
21. Non-MudObject objects
Not all items that you can modify on the Builder port are classified
as MudObjects. The following objects are objects that the player wouldn't
necessarily be able to pick up, look at, or be at. They range from quests
to spells and skills and are an integral part of making the mud come alive.
In most cases, you have to load a special area to edit these. This will
be described in each object.
22. Creating Spells and Skills
Spells and Skills are both Abilities, so in order to edit them you
must load the area "abilities" into memory (See the Loading Areas and
Modifying Objects section for more details). Once this is loaded, you
can modify, create, and delete abilities as needed.
There are two types of abilities, Spells and Skills. Except for the name
and the fact that one casts a spell and performs a skill, they are very
similiar. On both, one can set dependencies which limit how the user can
perform the ability. If, for instance, you want a spell that requires
intelligence and wisdom to cast, you would need to create a dependency on
both intelligence and wisdom. The value of that dependency would determine
if the the user can even use that ability and if they can, the chances of
them being able to successfully carry out the ability. To create a dependency,
you would type "new dependency (type)" where type is the type of dependency.
This ranges from ReqIntel for requiring intelligence to ReqStrength for
requiring strength.
Both spells and skills have strings that are displayed during combat to the
target, the caster or performer, and finally to bystanders. The "acting" group
of strings is displayed when the player casts or performs the ability. If
the cast or perform was successful, the "success" group of strings is
displayed. If it was a failure, the "failure" group of strings is displayed. '
All in all, you have 9 strings to customize your ability with. <br><br>
It also supplies limitations to the spell casting or ability performing. For
instance, with a certain spell you may require that they be holding an emerald
staff. The "MustHaveItem" dependency will allow you to specify these limitations.
The drain attribute will allow you to specify how much the casting or performing
of the ability will drain the player (magical energy drained for spells, endurance
drained for skills).
Finally, when a spell or skill was successful, it runs the special specified
in the Specials attribute. This is what actually runs the "meat" of
the ability. For the fireball spell, the following code is what makes
it work:
goto_if_eq("ind", 1, is_individual("primary"));
goto_if_eq("light", 1, is_itemflag_set("primary", "lightable"));
goto("end");
light:
set_itemflag("primary", "lit");
goto("end");
ind:
damage_individual("primary", 25);
fight_player("primary");
end:
You can probably see by this code that if you cast fireball on an individual
(player or mobile), it does 25 damage while if you cast it on an inanimate object
that can be lit, it lights the object. With the special code, you can make a
spell to do most anything. From picking a lock to summoning a demon, a spell
can be anything you would want it to be.
23. Creating Specials
Specials are objects that define unique activity that is not supported
in the mud code. For instance, if you want a sword to give the player a
shock when they pick it up, you would attach a special to the object that
does this. Once attached to an object, specials activate using triggers. The
trigger defines the action that will cause the code to be run. In the case of
the shocking sword, the trigger would be set to "pre_get" or "post_get" which
would give the shock before the sword is picked up or after the sword is picked
up. The list of triggers in triggers.txt will describe each trigger to you.
The code for the special is in interpreted format (don't worry if you don't
know what that means) and is described in the specials tutorial located
in the file specials.txt.
24. Creating Quests
Quests are actual defined puzzles for the player to embark upon and solve.
Your MUD may not have quests defined so they will not even come into play, as
quests can be done without actually defining them (creature won't teach you a
spell until you get a dragon's tooth for example). If the MUD does have quests
defined, you can create them by loading the "quests" area (See the Loading
Areas and Modifying Objects section for more details).
The attributes in the quest object allow you to indicate attributes of
the quest, ranging from the quest points awarded for completion to the
description of the quest the player will see when typing "qinfo (questname)".
The actual quest will be awarded to the players using a special (See
the Creating Specials section and the award_quest
special command.)
25. Creating Actions
Actions are things that the player can do that are really just for fun or to
provide an easy way to express themselves. It can range from smile to laugh, from
bopping them on the head to giving them a rose. They are just verbs that display
text when executed to the room and to a target if specified. Many other muds
call these as "socials".
The action objects consists of five strings which are displayed to different
people in different circumstances. The Actor string is displayed to the player
performing the action when there is no target involved and the Crowd string is
sent to the bystanders witnessing this action. For a targeted action (directed
towards somebody), the Target string is sent to the target of the action while
the Sender string is sent to the recipient. The Bystander string is sent to
those witnessing the action.
All strings provide special characters to insert names and pronouns into the
text as appropriate. For example, %a inserts the actor's name into the string.
%t inserts the target's name. The full list is as follows:<br><br>
%a The actor
%t The target
%! "his" if actor is male, "her" if female
%~ "him" if actor is male, "her" if female
%[(malestring)%(femalestring)] displays first string if actor is male,
second if female
%<(malestring)%(femalestring)> displays first string if target is male,
second if female
26. Creating Levels
Levels are used to indicate how far a player has progressed on a specific
track or chain. All levels are stored in chains, where a chain may be
the "Wizard" chain containing all levels of the wizard's guild. This way,
a player can be level 6 in the wizard's guild (wizard's chain) and level 12
in the warrior's guild (warrior chain) simultaneously, making them a
strong warrior with some magical abilities.
Players advance to the next level once certain specified criteria are met.
This criteria is contained in the level object in several ways. A few attributes
of the level object allow you to specify specific criteria, such as the MinStr
attribute which allows you to set a minimum strength for the player to be at.
MinDex, MinIntel, and MinExp all provide a means of ensuring the player has
certain attributes before the level is awarded. You can specify specific
criteria using the SpecialReq attribute. When a special is attached with the
trigger "on_level", it will run the special and if the special return with
the return_invalid_criteria function, it will not award the level. This way
you can specify specific things that must be true, such as the player has to
have an object in their inventory to gain level.
By using the WhenAwarded attribute, you can reward the players for their
level advance by performing most anything your imagination can come up with,
from increasing their attributes to awarding them priviledged objects. You
could even give them some adminflags, such as when they make master level.
27. Creating Races
Races define a race of creature. It contains attributes that indicate
what a player from that race starts out with. It can indicate spells and
skill they initially know, how strong they are initially, how dexterous
they are, etc.
Many items in the game will depend upon what race the player is.
Their communications will depend on what race they are and what they
can understand initially. An elf will not understand what a dwarf
says and visa versa.
Races will determine where a player starts in the game. It will also
determine where a player is transported to when they die. This way, a dead
player could be transported to the shaman's hut of their race who has
resurrected them.
Races also set which tutorial the players travel through when they first
create their character. When a race object is being modified, the builder
can type "new tutorial (name)" which will create a tutorial. The tutorial
is basically a special that can display text, transport a player to a
tutorial zone, or whatever else you want it to do. The player does not
exit the tutorial until the special function exit_tutorial is executed using
another special. If you have transported a player to a specific tutorial
location, then you could set up a special to run exit_tutorial when a
player tries to leave the tutorial area. It is important that, while in
the tutorial, the player is not given the opportunity to exit into the game
as they have not finished building their character and will be disadvantaged.
Tutorials can be renamed with "rename tutorial (name)" and deleted with
"delete tutorial (name)". Other attributes for tutorials are described in
the race attributes section.
28. Creating Texts
Text objects provide a means to edit various texts througout the game.
This could range from help and info files to the banners that players see
when they logon and quit the game. The type of text object depends on the
area you load. To edit and create help files, you would load the "help"
area. For info files, the "info" area should be loaded. The "banner" area
will provide a means to edit the specific banner files that are used.
Currently, two banners exist. The bldrbanner is the banner that will
appear when a player logs onto the builder port while the gamebanner is
displayed to players logging onto the game port.
Text objects are fairly simple, in that they only have the Title (with
the exception of Banners which don't have this) and the body. You create
the texts by typing "new (type) (name)" where type is either Help, Info,
or Banner. The type must match the area that is loaded. One point to
note on texts: you can't save these to a temporary file. Once you have
modified them, the only way to store them is to commit, which will write
them to their permanent files and incorporate them into the mud.
29. Creating Bulletin Boards
Bulletin boards can be a good forum for players to express ideas to other
players on the game. They can be used to put out ideas or even add to the
roleplaying environment of the game.
Bulletins can be set up to be global, meaning players can access it from
anywhere on the game, or set to a specific object so that players must be
at that object to access. They include several attributes that permits you
to tailor who can access the board and who is denied access. If denied
access, the player won't even know the board exists.
You can create a bulletin board by first loading the "bulletins" area and
then typing 'new bulletin (name)' where (name) is a name that the players
will refer to it as if the global flag is set. If the global flag is not
set, the players will have to use the object the bulletin board is attached
to in order to access the board.
30. Creating Inclinations
Inclinations are used during the initial login for new players. It
permits builders to define and players to select certain inclinations for
the race. For instance, in the elven race, most would not be exceedingly
strong but amidst the elves you would find those that are stronger than
most and those that are even more dexterous than others. Inclinations
could include musclebound (stronger but stupider than most), scholar
(more intelligent but weaker and clumsier), and on and on. Inclinations
only define offsets, meaning how much the attributes increase or decrease.
This means that a dwarf who selects musclebound inclination is going to be
much stronger than the elf who picks the musclebound inclination. Builders
should take care when developing inclinations so that one is not more
advantageous overall than others or players will discover and continually
select that inclination. Balance is the key.
Inclinations are maintained in the inclinations area. Loading this
area will allow a builder to modify, add, or delete inclinations. If you
do not wish inclinations to be availble to the players, just delete all
inclinations in the inclinations area and the players will not be asked
to select an inclination.
31. Creating Talents
Talents are used to fine-tune the character creation. The game
developer can offer several attributes for the players to start out with,
all tailorable via a special. Implementors can offer a dexterity
increasing talent or a strength decreasing deficiency (which gives more
talent funds). It allows for players to set indflags, such as night vision
or any other flags that exist. Players use talent funds to spend on talents.
The amount of talent funds players start out with is determined in the
aime.conf configuration file.
As with inclinations, talents should be balanced so they do not offer
too great an advantage. Talents could even be coupled with deficiencies,
so that a player who selects a talent would suffer somewhere else, providing
a balanced trade-off.
The talents area allows builders to add, delete, and modify talents. If
the game implementor does not want talents to be offered to the player,
merely leave the talents area empty and the player will not be asked to
select talents.
32. Creating Chatlines
A Chatline is a capability that permits players or builders to transmit
messages across the entire mud. It could be anything from a regular chat
line to a line for coders or administrators to discuss issues. A chatline
requires two seperate permissions. First, one must have permission to
transmit over a chatline (see the user's manual for how to set this) and
second, the users must have permission to see the messages. A player could
have permission to receive but not to send (such as a system message), or
to send and not receive (such as a wish line that goes to the immortals).
The Chatline object contains attributes that define the format of the
message that is sent. It also contains lineflags, which define who the
message will go to.
33. Using Color
Color can add to the atmosphere that you are trying to create in your
area. For instance, if you are creating an area of cold and ice, using
white and blue will heighten that effect. For a volcanic area, reds will
certainly make the player "feel" the area better. Green colors can also
emphasize forested areas, while yellow can portray a desert area (relentless
sun). A list of color codes can be found on the game port by typing "info
colorcodes"
34. Where do I start?
Below are some suggestions for creating a good zone.
Before you even create your first MudObject, you want to plan out
your location. First, think of the overall "feel" of the zone that
you mean to portray. If it is a mountain zone with a small village,
imagine what a mountainous village would be like. A village needs
to have a reason for being, so plan out the industry that drives the
village, how the villagers live, what they live in, and what traditions
and cultures that they may have.
Next, map out the layout of the zone. Keep in mind the things you
decided already, and develop the map accordingly. A mountainous
village would probably have buildings made partially of stone
and wood, and could even contain a mine or two. It would have a
store to buy food, a blacksmith, a woodworker, and maybe a bowsmith.
Most settlements would have a pub or some other form of entertainment
for the inhabitants.
Adding mobiles to this village would come next. This and the next step
of planning underlying "events" almost come hand in hand, since the
people are what will help make the village interesting. A village
will probably have a village leader, or a council that runs things.
It might have shopkeepers, workers, and some kids as well. Wives of
miners could dwell in the houses, and maybe some hermits living away
from the village.
Next, you need to plan out the underlying "events" and "turmoil" that
dwells just below the surface of the village. When a player talks to
a wife of a miner, they may say that "Sylva" is a good person, but
talking to another villager you may find a feud between this wife
and Sylva that when you ask them about it, they go on and on about this
person. You could create underground societies, hidden traitors, and
insurgency warriors fighting against the king. All this for the player
to uproot with a thorough investigation. Often, the more complex the
underlying puzzles are, the more interesting the zone will end up
being. It might be a good idea to create links to other zones, meaning
someone may have a brother in Courtland, and then add tellreplies to
that person and the brother. You may have to get permission from the
maintainer of that zone to add to it. While you're at it, plan out
the puzzles to be solved, hidden passageways to find, etc.
Finally, you create. Start with the locations, and add markers as you
create these locations. Add mobiles and tellreplies, and inventories
to shops as you see fit. Add specials to appropriate objects, and
finally, when you feel that you have a fully functional zone, test and
test some more. Login as a regular user and travel down every possible
path (including social and verbal paths, tellreplies and stuff)
and ensure the user can chase these paths as well. When it is tested,
your masterpiece is ready for the users to marvel at your creativity!
Again, this is just a suggested way of doing things, you are free to
find the method that works best for you.
35. I want to make this do that. Can I?
If there is something you want to put in your zone and either you
don't understand how to do it, or the tutorial doesn't explain a way,
be sure to tell a coder. They will be able to tell you if it is
possible and how to do it, or explain to you why it is not possible and
offer possible alternatives. The last thing we want to do is stifle the
creativity of your zones, so please ask. For requests for more features,
contact either the implementors of this mud or Slate at noelg@acm.org
(the mud code designer) to request the new feature.
|