/
lib/banish/
lib/d/coronos/
lib/d/coronos/w/alena/
lib/d/coronos/w/angel/
lib/d/coronos/w/angel/caves/
lib/d/coronos/w/angel/caves/monst/
lib/d/coronos/w/angel/city/chambers/
lib/d/coronos/w/angel/city/monst/
lib/d/coronos/w/angel/city/obj/
lib/d/coronos/w/angel/city/streets/
lib/d/coronos/w/angel/farms/plains/
lib/d/coronos/w/angel/monst/
lib/d/tempus/
lib/d/tempus/w/angel/
lib/d/tempus/w/kingbill/
lib/d/tempus/w/mirak/
lib/d/tempus/w/mirak/monst/
lib/d/tempus/w/mirak/obj/
lib/d/tempus/w/relgar/planes/baat/
lib/d/tempus/w/sarak/
lib/d/tempus/w/serepion/mon/
lib/d/tempus/w/valrejn/
lib/doc/
lib/doc/domains/
lib/doc/efun/
lib/include/fn_specs/
lib/info/
lib/inherit/base/
lib/log/
lib/log/mailbox/
lib/log/main/
lib/news/
lib/obj/party/
lib/objects/componen/
lib/open/
lib/open/party/
lib/open/paste/
lib/open/spells/
lib/open/valrejn/
lib/players/
lib/players/alena/
lib/players/alena/obj/
lib/players/alena/open/
lib/players/alena/private/
lib/players/angel/
lib/players/angel/obj/
lib/players/ash/
lib/players/biggs/
lib/players/biggs/food/
lib/players/biggs/gobkeep/
lib/players/biggs/mnstr/
lib/players/biggs/town/caves/
lib/players/biggs/town/tower/
lib/players/biggs/wpns/
lib/players/calris/
lib/players/deathurg/
lib/players/deathurg/open/
lib/players/deathurg/private/thief/
lib/players/dogberry/
lib/players/dogberry/library/
lib/players/dogberry/open/
lib/players/epsilon/
lib/players/epsilon/private/
lib/players/farewell/
lib/players/hippo/
lib/players/hippo/open/
lib/players/hippo/tools/
lib/players/jimpa/
lib/players/josh/
lib/players/josh/room/
lib/players/josh/room/mage/dungeon/
lib/players/josh/room/mage/dungeon/obj/
lib/players/josh/wep/
lib/players/kingbill/
lib/players/metatron/
lib/players/miette/
lib/players/mirak/
lib/players/mirak/open/
lib/players/parsilan/
lib/players/relgar/
lib/players/relgar/private/
lib/players/sarak/
lib/players/sarak/bugs/
lib/players/sarak/feelings/
lib/players/sarak/magical/
lib/players/sarak/minotaur/island/
lib/players/sarak/open/
lib/players/sarak/private/
lib/players/serepion/
lib/players/serepion/open/
lib/players/serepion/private/
lib/players/spike/
lib/players/spike/open/
lib/players/spike/private/
lib/players/spike/seaworld/
lib/players/valrejn/
lib/players/valrejn/open/
lib/players/valrejn/private/
lib/players/virus/
lib/players/wrath/
lib/players/wrath/arm/
lib/players/wrath/mon/
lib/players/wrath/room/
lib/players/wrath/room/entry/
lib/players/wrath/room/zolgath/
lib/players/wrath/weap/
lib/players/zil/
lib/room/
lib/room/city/arena/
lib/room/city/creator/
lib/room/city/garden/monst/
lib/room/city/library/
lib/room/city/library/open/books/
lib/room/city/shop/
lib/room/death/
lib/room/death/open/
lib/room/island/
lib/room/keeps/
lib/room/registry/
lib/room/ships/crew/
lib/room/ships/open/
lib/room/ships/open/types/bounty/
lib/room/ships/open/types/nebula/
lib/room/ships/open/types/phoenix/
lib/secure/udp_cmd_/
lib/skills/
lib/skills/fighter/
lib/skills/psionici/
lib/skills/thief/
lib/usr/
lib/usr/creators/
lib/usr/no_banis/
lib/usr/players/
                         Quests!
                         -------
     Quests are missions that players are sent on in order to
teach them efficient strategies for playing the mud; skills such
as efficient mapping of an area, problem solving, a little melee,
and cooperation with NPC's. A Quest is not something a player
does purely to receive experience points, but to accomplish
personal satisfaction. 


Steps in Making A Quest.
------------------------

     1) A nice place to find quests of any sort are in books that
describe legends and myths of all types. The heroics of
Launcelot, Hercales, Odin, Zeus, Moses, can all be themes for a
quest. These are typical depictions of what a QUEST is. It is NOT
just to kill one big monster.

     2) Plan out the quest. Write a detailed description of what
the player needs to aquire from monsters or rooms/areas, and what
he needs to do with them, and how he used these to accomplish the
set task. A QC will then look over your ideas and give you
suggestions on its merits, as well as ways of improving it.

     3) The QUEST must be of major importance to...

     a) The player - make it something RELEVANT to his knowledge
        of the mud. A good quest always makes use of his     
        knowledge of current areas.

     b) The mud as a global community - Quests are given out by
        the town clerk of the city of Tempus, or instructions 
        from the mayor, ordering the player to help out in some
        mission of vital importance to the safety of the city.

     A good working example of this can be found in the playing
of SSI's IBM Computer Game 'Pool of Radiance'(tm. TSR). Here,
certain proclamations are given to the players to help out the
city. They were requested to find out the happenings of a
graveyard outside the city, rescue a kidnapped child, return
powerful magical items to certain people who had them stolen,
etc. 

     4) When the quest is ready to be put into use by players it
must first be checked by a QC. He will then approve it, or send
it back to be reviewed and redone.
          
          
Functions
---------
string set_author(string who)      The Author is what creator
made the quest, it can be a single name, or a string of many
names.

string set_hint(string str)        The Quest Hint is a much
missunderstood function. This is a first starting clue, as well
as a quick description of what must be done by the player. An
example would be:

     "The captain of the guard, Earothas, has informed us that
he is in need of new recruits for his guard as some have been
killed by bands of orcs recently. Approach him, and tell him we
have sent you to aid him.
                                        [Quest Points 20]"

     Note that it gives the reason for WHY the quest is being
done, gives the player a little bit of INFORMATION, and gives
them their first contact for FURTHER information as to what to
do next. 

     Quests such as 'Find the Secret of the Guyvers', 'Find
Humphrey the Hermit' are not valid hints. A hint must say:

                      ...WHY
                        WHERE
                         WHO
            and give INFORMATION...as in the good example above
           and must be RELEVANT to the player in his mud playing.

     One good way is to recall that it is the Council of Tempus
City which is sending the player on this quest. Keep that in mind
when writing the hint. A QC will have the final say as to what
the hint will be permitted to be.


string set_qname(string str)       This is the name of the quest
itself. If using guard example from above:

     set_qname("City Guards");


string set_req_place(string room)  The quest system is set up so
that only one room can call the quest to be finished by the
player, this is that room.

string set_req_caller(string file) If the quest is called by an
object within the room, a sword when slaying the final monster,
or activating an object within a room, a wand or magical item,
then this is the filename of that item. If it is a room, then the
rooms filename is used.  

int set_min_level(int lev)         
int set_max_level(int lev)         These are the level parameters
for the quest. A player does choose a quest. but is instead
allocated one at random. These functions allow a player to be set
a quest to do, so that it is within his capability to complete.

int set_qpoints(int num)           Quest points are allocated a
player based upon the quests difficulty. Quest points are hence
allocated according to -

     Table 1: Quest difficulty ratings.

     Difficulty Rating             Quest Points for Completion
     ---------------------------------------------------------
          Routine                                 10
          Easy                                    20
          Light                                   30
          Medium                                  40
          Hard                                    50
          Very Hard                               60
          Extremely Hard                          70
          Sheer Folly                             80
          Absurd                                  90
          Insane                                  100
     ---------------------------------------------------------

     Note that a quest which is 'Hard' for levels 10-15 may be
'Sheer Folly' for levels 2-8, but 'Routine' for levels 30+. Your
QC will aid you in selecting an appropriate points value for the
quest.

 
status set_test(status flag)       When testing the quest, you
donot want your test character to have it set (you can only do
a quest once). This flag enables the quest to be done, without
completing it. A message will be given to the tester if he
completes the quest, but it will not be set to 'complete' in his
list of quests.


Example:
--------
     inherit "secure/questdef";
     void reset(status arg) {
       if(arg) return;

       set_author("Ramses");
       set_qname("Poseidon");
       set_hint(
     "Princess Shea has been captured by the orcs in the \n"+
     "south valley. You must rescue her before she dies  \n");
       set_min_level(15);
       set_max_level(19);
       set_req_place("players/angel/valley/hut20");
       set_req_caller("players/angel/valley/items/amulet");
       set_qpoints(50);
       set_test(1);
     }


status query_quests(string what)   Returns '1' if the string is
a quest that the player has completed.

string *query_all_quests()   
string *query_done_quests()        Returns an array of ALL the
completed quests the player has completed.

string assign_quest(string quest_id)    This is the function used
by the city clerk to assign quests. When done without an
argument, it simply assigns the player a random quest for his
level. If he already has an assigned quest, he cannot be set
another one UNTIL he completes his current quest. SEC6 and over
creators may 'force' a quest on a player through a patch.


status finish_quest(string quest_id)    Returns '1' if the
quest_id matches the players 'current quest'. Only those objects
and rooms specified by the quest object (shown above) will allow
the quest to be finished, as well as SEC6+ creators. When this
is done, the quest object itself adds the amount of quest points
the player is rewarded, and clears the way for the player to be
permitted to do another quest.

void quest_hint()        Writes the quest hint to the player.

int query_quest_points() Simply the amount of quest points the
player has.

string query_current_quest() 
string query_curr_quest()    This will return the name of the
current quest which is assigned to the player. 


Conclusion
----------
     Little quests are always fun and exciting for players. You
need not always code formal quests for players. Monsters and
other NPC's can always have chats which point to ways that
players can explore and solve small 'quests'. If you would like
to code a quest to help find Humphrey the Hermit, then it doesnt
have to be a QUEST. Monsters may have chats that express their
grief at Humphrey's dissapearance, pointing to possible gaining
of experience or money or items or the like if they find him. The
ONLY way that this becomes a QUEST is if, somehow, the creator
can decide as to WHY the Council of Tempus would send a player
to find him.

     Perhaps Humphrey is the Mayor's brother, missing for 2
weeks. Guards have been unable to find him, and it is suspected
that the dark elves may have kidnapped him? The players job is
to find out why, and to hopefully bring Humphrey back home.

     This is a quite acceptable way of introducing a true QUEST
to a player, whereas 'Humphrey is missing, talk to the barman
about the rumours' is not. 

     If in any doubt, a SENIOR or ELDER will help you set out and
design your quest. Remember, more than one Creator can work on
a quest. Quests from multiple areas can be fun and exciting.
Recall that you can manipulate access to certain directories
through your access.c object in your home directory for this
purpose.

     Players ARE permitted to help eachother out in doing a quest
when this involves killing monsters, and helping out discovering
problems and searching and exploring areas. What is discouraged
is this -

     * Don't tell players how to finish any part of a quest. Let
       them explore and search for themselves.

     * And don't log in with your test character to tell them  
       either!

     * Players who have already done the quest should be disuaded
       from telling them HOW to complete it. This is partially
       performed by giving the player a random quest, rather than
       allowing them to choose which one they wish to do.

     If you can design a quest that encorperates cooperation
between many players then by all means code it! Remember,
however, that only the person with the correctly assigned quest
will be able to complete it.

                                             Angel, July 1994.