/
dirt31/
dirt31/bin/
      DIRT-1      Changes & additions from version IV abermud  (June 1990)
 ===========================================================================


o New data-structure
  ------------------
  Made ublock, objinfo and world_file into structs. Everything is
  now defined in the file types.h.


o Shared-Memory
  -------------
  Implemented Shared-memory. The world-file will be mapped in main-memory
  and be shared by all the processes if SHARED_MEM is defined in kernel.h and
  thus avoid most of the time-consuming disk i/o. It may not work on older 
  op.sys versions (like the one our machine "Lars" runs...)

  A small note, (May 1992) by Nicknack:
	We later implemented shared-mem using the sys-V sytem calls, so that
	it is possible to chose which to use.. and it turned out that "Lars"
	_could_ have used those if we had known that at the time *sigh* :)

o New Level
  -------------
  This version supports a Demi-God level. The idea is that while the
  Arch-Wizards take care of frobs, the Demi-God has access to the
  system log-file and handles bug-messages, making new titles, setin/out
  messages and prompts on-line (if the god is too lazy to do this himself.
  if not, it may be better to avoid the extra level...) 
  Apprentice level is 12, Wizard-levels go from 13-9999 as before, 
  Arch-Wizard-levels from 10000-67999, Demi-God levels from 68000-89999
  and Gods have levels from 90000 to 99999.


o S-flags, P-flags & Mask
  -----------------------
  Most priveliges are no longer asociated with certain levels, but
  P-flags determine what a player is allowed to do. The number of
  flags has been increased to 64. Everyone can change his own P-flags with
  the PFLAGS command, but his MASK determines which flags he is allowed to
  change. (or change on others if he has the PflagEdit bit set.)
  Everyone can see his own mask by doing "Mask me".  When becomming a wizard,
  or beeing frobbed to a new level, the player gets certain standard flags
  set as defined by the "DATA/pflags" file. The MASK command works just like
  the PFLAGS command, but normally only gods have MaskEdit which allows him
  to change peoples mask. This system is very secure since if, say a mortal,
  accidently got PflagEdit, he couldn't do any harm since he normally has no
  bits set in his mask. Many of the flags that were p-flags in version IV,
  has been made into S (status) flags, like Blind, Brief,Female, HasMail et.c.,
  so the p-flags are now pure priveliges. They are also used on mobiles,
  for instance to keep mobiles who have special purposes from being summoned,
  or to determine their sex.

  New usage is:   PFLAGS <player> <flag-name> <true or false>

  Example:    Pflags Kantele NoZap False
              Pflags me Zap True
              Zap Kantele 

  See also: pflags.h, pflagnames.h, DATA/pflags, sflagnames.h and sflags.h.


o Changes to Existing Commands
  ----------------------------

  --Wizards can summon/trans multiple players/objects at once, example:
    "AT dead1 TRANS kantele boddiker steinar"

  --It is now possible to GOTO <object> or AT <object> <command> et.c.

  --Most commands like Heal, Privs, Stats, Pflags, Mask, Change-score, et.c
    also work on players who are not in the game now. The "UAFinfo" p-flag
    must be set to allow you to do this. 

  --Wizards and above may chose POSE-text, examples: "Pose fireball",
    "Pose hamster" or by numbers: "Pose 2", "Pose 3"....Abbreviations may
    of course be used as long as the argument is unique, ex: "Pose f".

  --The Wizlock command has been generalised and replaces the old wizlock,
    awizlock, and godlock commands. 
    Usage is now WIZLOCK followed by either a level number or string,
    examples:  "Wizlock wizard" or "Wizlock 13" locks the game for all non-
    wizards, "wizlock magician" or "wizlock 7" locks the game for everyone
    below level 7 , "Wizlock 79" locks the game for all but Wizards above
    level 78, "wizlock apprentice" locks the game for mortals and
    "Wizlock Off" unlocks the game et.c et.c......
    Wizlock without arguments displays the current lock-status.

  --The Change command is expanded to also being able to handle changing a
    players score, level or strength, terminal-type and the damage and
    aggressiveness of mobiles. And Change [pflags | mask | lflags | mflags] is
    identical to the pflags/mask/lflags/mflags commands. A players
    visibility level is also saved with his score et.c, and is used to
    determine which vis-level he will have when entering again. Of course
    this can also be changed on players not in the game.
    (subject to "UAFinfo" being set of course.)

  --Wizards (or rather, those who have the Resurrect p-flag) can now
    resurrect mobiles as well as objects. The mobile will appear with its
    strength intact at the location of the player issuing the command.
    (if the mobile was not dead, it will just have its strength reset.)
    This is the wizards chance of manipulating mobiles since they normally
    aren't given the ChMobStr flag needed to change a mobiles strength freely.

  --Lflags can be used to not only read, but also change the location-flags
    in rooms. Example:

      LFLAGS start1 death true
      LFLAGS start2 death true
    (My favourite way of doing wizlock :-)

    LflagEdit is needed to be able to do this.
    
  --All names of flags and other arguments to commands are now text strings
    instead of numbers, and may be abbreviated as long as they are 
    still unique.


o New Commands & stuff
  --------------------
  --The IP adress of the callers host is available. It is avaiable to
    players which have the ShowUsers p-flag set, and it is used in:
    
         -The (new) TTY command which displayes that adress for a given user,

         -The enter-game messages for wizards, example:
           [Gandalf [128.39.10.59] has entered the game]
 
         -The 'Users' command, where it is listed after each players name.
  
    It is also displayed in the syslog file on game-entry.

    If the game is local (private) the local account-name is used instead
    of the machine-adress. (Actually, if the player logs in under a 
    name different from the USE_TTY_NAME defined in the kernel.h file.)

  --Made the MAIL command. Users may send mail to each other ala LP-Mud.

  --Made the SYSLOG command. Gods (or Demi-Gods) can use this to look at
    the syslog file on-line.  See "help syslog" for details.

  --It is worth noting that the output from various commands such as the
    SYSLOG and MAIL commands, are for convenience run through a pager.
    What pager to use is defined in the kernel.h file, we found
    that 'more' was well suited for this.

  --Converse [player]  
    Everything you type is sent to [player]. (like tell..)

  --The [wizard-msg] also says who a mobile was killed by.

  --Setin/out messages for wizards and prompts are now possible to set
    permanently from within the game with the commands:

         - PSETIN, PSETOUT, PSETMIN, PSETMOUT, PSETVIN, PSETVOUT,
           PSETPROMPT
    
    Messages for entering/quitting the game, PSETQIN and PSETQOUT
    have been added too.
    
  --Titles can also be changed in that way with the TITLE command.
    See Help Title for details.

    The Setin/out and Title commands can be run by those who have
    the TitleEdit flag set on his character. 
    (Normally only Gods (or Demi-Gods if they are used) ) 

  --Wizards can chose which room to enter when entering the game,this
    is specified in the same file/system which holds the titles/setins
    and prompts...note that these are in the same file now, DATA/titles.src.
    which is a readable form of the binary title file used by the program.
    The conversion between these is done automaticly with the help
    of Make.

  --New format for the setout command: Name/direction et.c can be placed
    anywhere in the string, if user Gandalf had this setout:

    %n has gone %d, you can see %f footprints behind %F.

    It will show up like this if he went south:
    Gandalf has gone south, you can see his footprints behind him.
    'his' and 'him' will show as 'her' if he changes his sex...

  --The Wizlist is automaticly updated when a change of level on
    someone occurs, like "change level", "frob", "zap", etc,
    so there should be no need to edit the wizlist manually anymore.
    
o M-flags
  ------
  --The behavior of mobiles (i.e if it casts missiles like the Hermit, or
    picks stuff like the Minotaur et.c) is determined by the Mobile-flags of
    the mobile, they are not limited to a certain mobile like in version IV.
    The flags can also be changed in the game with the MFLAGS command.
    Example: 
    >Mflags troll CanFireball true           Make the Troll cast fireballs.
    >Mflags Wraith                           Show the Wraith's M-flags.

    Some Mflags are:

    NegFrost/NegFireball/et.c..   Become STRONGER instead of weaker.
    PickStuff                     Pick up stuff, wield weapon and wear armors.
    CanShock/Can..et.c...         Casts Shock/fireballs/missiles or frost.
    NoMove                        Don't move.
    DrainScr                      Drain score. (like the Wraith)
    Thief                         Steals stuff from players!

    MflagEdit is needed to change these from the values given at reset.

o Logging
  -------
  --The 'mudlog' function is changed to handle a variable number of
    arguments which makes logging more compact and easier:

  --Level and score is logged on game entry and exit, which host a user is
    calling from is also logged on entering the game. Which flag and to
    what value is now logged on every command like pflags, lflafs, mflags,
    et.c...in adittion to who set the flag on who which was the only thing
    that was logged in version IV.

  --_Who_ killed a player magically is now logged.


o Changes to existing game-stuff
  -------------------------
  --The Minotaur Wields the best weapon he can find and wears armor. Also
    put him closer to the normal route players take..
  --Half of a weapons damage is added to a mobiles damage is he is wielding
    the weapon. Cosimo and The Djinni wield weapons at reset.
  --The Flame, Lavaman and Efreet become stronger if fireballed, the Yeti
    and the Guardian become stronger if frosted, (i.e they have NegFireball
    and NegFrost, see Mflags)
  --The Talisman enhances the missile-spell now like the library-book says.
    The chance of success is doubled, but the impact doesn't increase
    past level 5. This so that low-level players have a spell to use
    until they get stronger.
  --The horseshoe-percentage is raised from 3 to 8 so it will have some
    practical use.
  --Update or Become is not allowed while fighting (to prevent people 
    from cheating.)   

o Help
  ----
  --The 'fullhelp' file is filtered before being inputted to the HELP 
    command. The filter only lets through help-text on commands that the
    player is allowed to use. If a Warrior typed 'Help Pose' for instance,
    he would get 'No such command' or something like that. The filter can
    test both on levels or Pflags/Sflags/Mask.. any logical expression
    can be used. Last, the desired helptext is piped through the defined PAGER.
    See the file DATA/fullhelp for examples.


o Technical Changes & Fixed Bugs
  ------------------------------
  --Major bug fixed, if NO_SUMMON was defined, the talisman/pendant/amulet
    et.c didn't protect against summoning...

  --Fixed bug that had you eaten by the tree et.c when you entered the
    game after having made a new world-file but before reset. And the 
    max is set to MAX_USERS automaticly, not to 0.

  --The '!' command does no longer treat previous <cr>'s as commands
    anymore, so you can still type '!' and have your spells work after
    having accidentally hit return in the middle of a fight for instance.

  --Corrected bug: A character is no longer *saved* with level=1, sc=0 if
    he is not allowed to enter for some reason. (host banned...)

  --Fixed bug, Gods may now force Arch-Wizards.

  --Every hard-coded object/room/mobile/sendsys code has been replaced with
    #define'd values to make the code more readable/flexible.

  --Made a 'Busy' S-flag. If you can't receive messages for some reason,
    like if you are reading help or a letter, (i.e closeworld() has been
    done) players who try to talk to you get a "He is busy" message.

  --New and better cls() routine, courtsey of Elrond (ds@ifi.uio.no)

  --The message-sending system is changed. sendsys() takes as arguments
    an upper and lower bound for which level the message is to be sent to.
    This is very convenient, for instance when a wizard quits the game, 
    only those with a level above his vis-level will get the [quit..] msg.
    Or if a player is in the same room as others to which he is invisible,
    and he types 'invis' to become _more_ invisible, the others will not get
    the 'has vanished' message. Lots of small things like that is improved.
    So the SYS_WIZ and SYS_AWIZ have been replaced with the more general
    SYS_MSG. And more have been added, SYS_PFL for example is used when
    determining which enter-game message to send to wizards, the one
    with or the one without the host-info. See entergame() in tk.c
         In adittion, you can easily specify if the message is to be
    sent in color, of if the bell is to be sounded , if the message is to be 
    ignored if the 'quiet' S-flag is set and so on....
    See the file sendsys.c for details.
  
  --Banned characters & banned Hosts.
    Banned character names are to be placed in the DATA/banned file as
    usual. But you can now put a '!' in the first line by itself and
    the banned file is instead a guest-file, only those characters are
    allowed.
    It is now possible to ban players from hosts too, by placing the
    address of the machine in the DATA/banned_hosts file as it would
    appear in the TTY command. '*' notation is allowed, example:
    If 129.240.*.* is in that file, noone from the University of Oslo
    will be allowed to enter. The '!' in the first character pos. works
    here too. It is writetty() and infile() that checks all of this.

  --There is a separate bulletin for mortals/wizards/awizards, they
    appear after eachother like in 'help' with 'hit return to cont." et.c...


o Generate
  --------
  --The biggest change (though not visible to players) is probably the new
    way of describing the data, rooms, mobiles and objects. These are now
    grouped zone by zone, everything that belongs to the same zone is
    in a file called "DATA/ZONES/zone-name.zone". They are in a very free 
    format, easy to read and understand. Flags are refered to by names et.c..
    Here is an example from blizzard.zone:

                    Name            = hermit
                    Pname           = "The Hermit"
                    Location        = hut
                    Strength        = 60
                    Level           = -2
                    Damage          = 10 
                    Pflags  {NoSummon NoSteal}
                    Mflags  {CanMissile QFood}
                    Description     = "A hungry, unwashed hermit sits here."
                    End             = hermit

    Agression can also be specified but default is mod(level,100) if level
    is > 200, else 0.

  --And this is an example of an object from the same zone:

    Name      = ball
    AltName   = crystal
    Location  = IN_CONTAINER:bag
    MaxState  = 3
    BValue    = 20
    Size      = 15
    Desc[0]   = "A crystal ball has been placed here."
    Desc[1]   = "A crystal ball has been placed here, glowing a pale red."
    Desc[2]   = "A crystal ball has been placed here, glowing a pale blue."
    Desc[3]   = "A crystal ball has been placed here, glowing a pale green."
    End       = ball

  --The program that converts these descriptions also checks for 
    consistency in the data, and produces a log-file. The idea is that you
    should have great freedom in chosing to include or exclude a zone...
         For example in the valley you have a gate and the other side of
    that gate is in the zone cave... if you therefore choose to not include
    the cave that gate-object will not be included...and the exit that
    leads trough this gate will not be present.

  --The format of the Uaf-rand file (that holds all the player-info) has
    been changed and a conversion-program is avaiable. (NEWUAF)

    This has been some of the things we did...but there are
    numerous other stuff, basically the whole source-code has been taken apart
    and rewritten.
                            July 1990,

             Alf Salte (Alf)          Gjermund S|rseth (Nicknack)