File: tutorial.txt

package info (click to toggle)
aime-doc 0.60-1.2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 508 kB
  • ctags: 174
  • sloc: makefile: 44; sh: 1
file content (959 lines) | stat: -rw-r--r-- 44,340 bytes parent folder | download | duplicates (4)
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.