Introduction:
   In this document I will try to describe some of the differences
   between the 3.1.2-DR server and the one we are currently using,
   Amylaar's 3.2@314 server. It is written for trained wizards and
   is probably not much help for uncorrupted wizards..
   The differences include a few limitations and some nice features.

#include
   No longer accepts a closing semi-colon. Thus #include "file.h";
   is invalid. Just remove the semi-colon. #include "file.h"
   is okay.
   Enclose system header files in <> rather than "". <> makes the
   preprocessor search the system include directories before searching
   locally. The exact opposite of "".
   Currently the system include directories are: /std/include

inherit
   It is not allowed to define functions before an inherit statement.
   Just move inheriting to the top of the file.
   Multiple inheritance is allowed. When needed the :: operator can
   be prepended with the name of the inherited object.
Example...
   efun::say() is also useful if a local say() function exists and
   the efun is needed as an example.

sscanf()
   Earlier sscanf would return the remainder string in any extra
   parameter. sscanf(str, "%s ", a, b); made perfect sense. Now
   you have to supply an ending %s to achieve the same result.
   For example sscanf(str, "%s %s", a, b);
   A new feature is the * modifier. It means scan-but-don't-return.
   sscanf(str, "%*s %s", remainder); for example

filter_objects()
   Have changed behaviour - I think. filter_array() and filter_objects()
   were alike before. Read the /doc/efun/filter_objects doc if needed.

/* */
   One line comments are easier done with //
   // This is a comment
   /* This is also a comment */

#pragma strong_types
   If you supply function types the compiler will enter strong_types
   mode (earlier it would go to strict_types mode). strong_types
   expects 'mixed' from call_other()'s, where strict_types expects
   'unknown'. Excessive type casting is thus not necessary, since
   'mixed' is compatible with all other types, whereas 'unknown' is
   not compatible with any other types.

#pragma combine_strings
   This pragma is the server's default.
   Quoted strings only seperated by whitespace are always
   combined into one.
   With combine_strings, strings separated by plusses (+) are
   automatically combined into one string.
      #define NAME "Harry"
      write("This is the property of " NAME ".\n");
   gives the exact same result as
      write("This is the property of Harry.\n");
   and you avoid string additions at run-time.

call_out()
   this_player() is saved with call_outs. With 3.1.2 this_player()
   was forgotten after the call_out was issued. There are many
   effects from this - a 'visible' one is caused by the fact that
   the output from say() is not heard by this_player().

this_player()
    this_player(1) has been replaced by this_interactive().

remove_action()
    this function is entirely gone.
