10/28/1999 - POLC085
==========
    Fixed a bug where dragging part of a stack from the ground would
      misplace the remainder.
    Items that are 'SaveOnExit 0' and in a container will no longer be saved.

10/25/1999 - POLC084
==========
    script compiler: '\' will function as an escape character in strings
      - \n and \t are defined as special characters
    script compiler: *.hsr files are ASP-like source pages
     (see files in the experimental files section for examples)
    added http::WriteHtmlRaw(str) for .hsr/.asp pages
    script scheduler uses a priority divider now; will be testing to see
      if this can help with lag in some instances
    polcore().set_priority_divide( newvalue ) added
    polcore().priority_divide (read-only)
    script compiler will generate a wordlist file if '-W' option is passed.
    added mobile.criminal property
    when loading, 1 dot will print per 1000 objects loaded.
    Fixed a bug in array.insert(index,value) where it was impossible
      to insert at the end of an array, or into an empty array.
    Added array.append(value), array.reverse(), and array.sort() methods
    Inactivity timer added: warning after 4 minutes, disconnect after 5 mins
    MaxCallDepth for scripts can be specified in pol.cfg (default 100)
!!  Decreased system load time.  Please BACK UP your datafiles!
    IgnoreLoadErrors=1 in pol.cfg will ignore (most) load errors and start server
    Script listfiles generated with -l with always contain source and
      file/line information, even if -i is not specified
      (it's best not to use -i, in fact -- less overhead)
    Added polcore().script_profiles property:
      returns array of { name, instr, invocations, instr_per_invoc, instr_percent }
      - same data as output by .log_profile
    Added polcore().clear_script_profile_counters() method.
    array.insert() functions properly again
    Overhauled the client item manipulation system (getting,dropping,equipping items):
      - LOS is now checked when picking up an item
      - LOS is checked when dropping an item
      - range must be <= 2 to pick up an item
      - drop-item range increased to 2
      - picked up items are marked 'inuse'
        Note this causes some easy resource-use exploits until scripts mark
        items in-use.  But that's better than crashing.
    Added uo::ReserveItem(item) and uo::ReleaseItem(item)
      - these mark an item as inuse for this script only to use.
      - all reserved items will be released on script exit if ReleaseItem is not called.
    'inuse' items have special rules:
      - they cannot be picked up (not even part of a stack)
      - they cannot be added to, if they're a stack.
      - they cannot be used as reagents
      - they cannot be used as projectiles
      - they cannot be spent at a vendor
      - they cannot be sold to a vendor
      - they will not decay
      - if a stack, they cannot be added to if a like item is bought at a vendor
      - The following functions will not operate on inuse items, unless the calling
        script reserved the item for its use with ReserveItem
          - DestroyItem
          - SubtractAmount
          - MoveItem
          - MoveItemToContainer
          - EquipItem
        This means most scripts that have to check for materials twice (typically
        before and after doing sound effects and delays) can just reserve the items
        before checking for materials.

      I'm considering whether inuse items should be doubleclickable, and
        whether or not the doubleclick script should start out with the
        item already reserved.
     MoveCharacterToLocation and login will generate EVID_ENTEREDAREA events
     Ghosts will no longer use nor require stamina for movement


10/07/1999 - POLC083
==========
    Lots of items down there.  The highlights:
        - secure trading (but see important note about enabling)
        - stamina costs for movement

    Startup output -- error messages, etc will be logged to 'start.log'.
    Disabled the following internal text commands, because a replacement
      script exists, or they're rarely used and a script could be written.
      (They still exist; renamed to i_[cmd] in case you really need them)
        .ident
        .setusescript
    Added polcore() members:
        log_profile( clear )
    text command script names can now contain underscores
    New config file - config/servspecopt.cfg, for Server Specific Options
       - DefaultDoubleclickRange, which is used if DoubleclickRange isn't
         specified for an objtype in itemdesc.cfg
       The default doubleclick range (if not specified there) is now 2
    GMs should still see ghosts after they drop out of warmode
    added mobile.enable( privilege ), mobile.disable( privilege )
       - for enabling/disabling privileges
    Added functions to the NPC module:
        WalkTowardLocation( x, y );
        WalkAwayFromLocation( x, y );
        RunTowardLocation( x, y );
        RunAwayFromLocation( x, y );
        TurnTowardLocation( x, y );
        TurnAwayFromLocation( x, y );
    polcore().itemcount will now decrease
    Added 'ipmatch' property to servers.cfg, so localhost and LAN servers
      can be made to only show up if you connect from localhost or the lan.
    Added the 'all' privilege which effectively gives you..all the privileges!
    Added the 'dblclickany' privilege which lets you doubleclick any
      doubleclickable object regardless of range
    itemdesc.cfg has a 'Weight' entry which can specify whole weights
      or fractional weights ("1/50" etc) in stones
    Item weights will be tracked.  No limits or stamina effects yet.
    added 'object.weight' member
    Fixed an integrity problem if doors were on a zone boundary
    Fixed a crash bug if a house component was destroyed before the house was.
    Items will not decay on multis unless "DecayOnMultis 1" is set in itemdesc.cfg
!       (Note this should be set for corpses in particular)
    Gave boats some TLC: (some scripts+config files need updated to use this)
       - corpses created on a boat will move with it.
       - items dropped on the boat when a corpse decays will move with it
       - the remainder of a stack half-removed from a deck will move with the boat
       - NPCs created directly on boats will move with it
       - added the rest of the boat definitions to config/boats.cfg
       - walkon scripts will fire if the item's Z is 0 or 1-z below the walker
          (specifically so that boat planks can have walkon scripts)
       - massaged the data from client files so long boats don't have a hole in
          the middle.
       - fixed the "Deck is not empty" bug on boat destruction
       - characters who log off on a boat will be moved when the boat moves
       - added member 'boat.has_offline_mobiles'
       - added method 'boat.move_offline_mobiles(x,y,z)' for moving the offline
         mobiles carried by a ship somewhere.  This function is very trusting
         regarding the coordinates you pass it. As long as they're within the
         world bounds, it'll move the mobiles there.
    "walkon" scripts have more parameters.  the full declaration:
       program walkon( who, what, lastx, lasty, lastz )
       the 'last' coordinates are the coordinates the walker is coming from.
    MoveCharacterToLocation takes a 5th parameter, 'flags'
       if MOVEMOB_FLAG_FORCELOCATION included, force z-location
         (ignore any obstacles)
    Added polcore().packages() - array of installed package names
    Added polcore().compiledate - text string
    Added polcore().compiletime - text string
    Incorporated Beosil's latest crypto code to deal with the 21036-bytes bug
    Fixed a bug with gump-dialog handling for dialogs with many textentry fields
    Package start scripts will run under the Linux build
    Added basics of secure trading:
        Enabled if EnableSecureTrading=1 is set in pol.cfg.
        Items can be added to the secure trade window
        Items cannot be removed except through cancelling the trade
        Items in the secure trade window can be singleclicked
        Unlocked containers in your side of the trade window can be
          doubleclicked, and will open for both trading parties
        stacks currently cannot be added to.
        If either party disconnects, trade will be cancelled.
        Traded items which will not fit in your backpack will fall to your feet.
        All secure trades will be cancelled before saving data or shutting down.
!       This entry must be added to config/itemdesc.cfg:
            Container 0xFF01
            {
                Name    SecureTradeContainer
                graphic 0x1E5E
                Gump    0x003C
                MinX    0
                MaxX    66
                MinY    0
                MaxY    33
            }
    Added servspecopt.cfg property: MovementUsesStamina=0/1
        If this is set, you will need config/movecost.cfg
        Note movement cost code is still being developed.
    ecompile: option -l  (ell) will cause a listfile to be generated, which
      contains the internal instructions in the compiled file.  In conjunction
      with '-i' (include debug info) you may have a fighting chance at seeing
      where your script corresponds to the instructions.  May be useful
      for debugging or profiling, or for just being nosy.
    Added runaway script detection.  RunawayScriptThreshold in pol.cfg specifies
      how many instructions a script can execute without sleeping before being
      reported as a runaway.  The default is 5000 instructions.  Reports will
      be logged to log/script.log
    spellbook weight will no longer include weight of contained scrolls
    corrected an error in container-weight handling
    added polcore().running_scripts
    returns an array of structures { name, instr_cycles, consec_cycles, PC, call_depth, num_globals },
      one element per running script.  See scripts/www/running_scripts.src
    pol.cfg can specify WebServerPassword=username:password, to restrict access
      If this is used, nothing can be accessed without the password.
      A more flexible password scheme is in design.


09/09/1999 - POLC082
==========
    Added 'hearghosts' privilege
    Support added for UO client 1.26.1
      - key constants are specified in a key file, so maybe next time
        this won't require a rebuild.
      - pol.cfg must have "Keyfile=crypto/v1_26_1.key"



09/05/1999 - POLC081
==========
    Added cfgfile::LoadTusScpFile(basename) - loads TUS .SCP format files
      so they can be accessed like a POL .cfg file
      (not an importer - an importer will be built upon this)
    New characters will start with clothing that matches what the new
      client displays.
    mobile.concealed can be set to anywhere between 0 and mobile.cmdlevel
    mobile.concealed is now saved with game state
    added array.erase( index ) - erases an element in an array
    added array.size() - returns number of elements in an array
    added array.shrink( nelems ) - erases all but the first 'nelems' elements
    added array.insert( index, value ) - inserts an new element
    NPC masters will be saved with game state
    packages can contain npcdesc.cfg and ai scripts.. ".createnpc :pkg:npctype"
    Encryption keys changed to support client 1.26b (Thanks Beosil!)
    Added some code to get more information on a particular crash bug
    Fixed an AV condition when equipping an NPC that isn't strong enough
    ".integ_item" will write problem information to the logfile
    a stack backtrace will be logged on assertion failure
    Corrected an error in house destruction which could cause corruption
    added os::events_waiting() - returns number of events in script's event queue
    added direct stat modification:
        mobile.setstr( newstrength )
        mobile.setdex( newdexterity )
        mobile.setint( newintelligence )

08/28/1999 - POLC080
==========
    POL now supports the new UO Client (v 1.26)
        startloc.cfg must be changed to list cities in a particular order.
        (Yew, Minoc, Britain, Moonglow, Trinsic, Magincia, Jhelom, Skara Brae, Vesper)
    Armor now has quality, hp, and maxhp.  This means Armor entries in
      itemdesc.cfg must have a MaxHP entry!

    Added polcore().version (79,80,81 etc)
    Added polcore().verstr ("POL080", "POL080X1" etc)
    POL version string will be written to log file on startup
    Added CreateAccount( acctname, password, enabled )
      - returns an accountref (see docs/objref/account.htm)
    character.acct added
    Account object created; gives the ability to ban,unban, disable, enable,
      change the account name, and change the account password, from scripts.
    Large shards will want to set UseNewStaticsFile=1 in pol.cfg.  This will
      create files 'statics0.pol' and 'staidx0.pol', which are smaller versions
      of statics0.mul and staidx0.mul.  These files are then loaded wholly into
      memory for very fast access for walking height and LOS checks.
      If this option is enabled, POL uses an additional 11 MB memory
    NPC movement anchors can be set; call npc::SetAnchor() (see npc.em)
      Movement anchors are only in effect when NPC isn't in warmode
    ".unload" will now unload all scripts whos name contains the parameter
      ".unload ai" will unload all scripts whos name contains 'ai', for example.
    Fixed an access violation if a mobile died with a full backpack and
      worn items.  (bug introduced in the 'newbie items' update)
    Added weather effects, using static regions (regions/weather.cfg)
    Armor will now take damage during combat
    stackable weapons/armor in vendor inventories
     (merchant.src must be changed to call CreateItemInInventory)
    New priv/settings: seehidden, seeghosts
    added character.setlightlevel( lightlevel, duration ) (mylight.src tests)
      - sets personal light level for a period of time (duration in seconds)
    DestroyMulti can destroy boats now (but use BoatFromItem..see destroyboat.src)
    Fixed an object leak on house destruction
    Paperdolls will only be opened for humans, ghosts, GMs, Lord British,
      Lord Blackthorne, and Dupre
    chrdeath.src has a second parameter, the character's ghost
    Added chr.squelch(duration) - duration in seconds.  -1=forever, 0=off
    added chr.squelched
    "[invulnerable]", "[frozen]", and "[squelched]" tags will display
      over affected mobiles when singleclicked.
    Added SetRegionWeatherLevel(regionname,type,severity,aux,lightoverride)
      - test/setweather.src tests

08/16/1999 - POLC079
==========
    items on others' paperdolls within visual ranged can be singleclicked
    If an equipped item can't be equipped on load, it'll be stuffed into the backpack
      If the backpack is full, the server will refuse to start.
    More error messages will print hex serial numbers now
    It will be impossible to assign a blank name to a mobile, or a name
      that begins with whitespace (this traps all-whitespace names)
    All the houses should be creatable now.
    Made a change that seems to help lag when lots of mobiles are on-screen at once
    http::WriteHtml calls are now handled more efficiently
    corrected anims for nonhumans using projectile weapons
    'StrRequired' (Strength Requirement to Equip Item) can be specified in itemdesc.cfg
    item.newbie added; 'newbie' items will stay with the ghost.
    'Newbie' can be specified in itemdesc.cfg.  This is the default 'newbie' flag
      for items of this type.  Typically set for spellbooks.
      - newbie items stay with the ghost
      - newbie stacks split turn into two newbie stacks
      - a non-newbie item added to a newbie stack contaminates the newbie stack,
        making it non-newbie
      - the various CreateInContainer functions will not add to an existing newbie stack
      - vendors won't buy newbie items
    'BlocksCastingIfInHand' can be specified in itemdesc.cfg.  Both hands will be checked
    for items after reagents are consumed but before mana is consumed
    RequireSpellbooks can be specified in pol.cfg; default is 1
      - Spellbooks, with scrolls, are required in order to cast spells if this is set.

08/10/1999 - POLC078
==========
    added character.acctname
    added weapon.dmg_mod (-32768 to +32767, but be gentle :)
    added armor.ar_mod
      Note if you change ar_mod on equipped armor, it won't reflect in your displayed
      AR until you take the armor off and put it back on, but the change will
      increase or decrease your protection immediately.
    added armor.ar  (adjusted by ar_mod)
    added armor.ar_base (unadjusted)
    added nocast regions (will work for spells and scrolls, if they use StartSpellEffect)
    SaveWorldState() will return an error if an exception occurs during world save
      (instead of aborting the calling script)
    added weapon.maxhp_mod
    Scaled back optimizations so that crash dumps can give more information
    Included more debug checks in the release version, to search for odd problems
    corrected an out-of-bounds condition for mobiles near the edges of the world
    Fixed a bug where boats could go off one side of the world a couple of tiles.
    It is now impossible to use a skill or item during a casting delay
    Houses can sit on slightly uneven ground; the z-coord can differ by up to 2
    added item.sellprice; used instead of 'VendorSellsFor' if nonzero.
      sellprice on a stack is the price for one unit
    TwoHanded (0/1) can be set in itemdesc.cfg for weapons
    Started on z-coord problems, but the map seems to sit above some statics *sigh*
    Target() will accept TGTOPT_HARMFUL, TGTOPT_NEUTRAL, and TGT_HELPFUL in its
     'options' parameter.  Harmful actions mark you criminal or aggressor according
     to normal flagging rules.  Helpful actions on a criminal will mark you a criminal.
     The criminal query window will pop up when appropriate if enabled on the client.
    NPCs will get "enteredarea" and "leftarea" events when they move
    alignment (good, neutral, evil) can be specified in npcdesc.cfg
    actions for/against yourself or your pets will not affect criminal flags, etc
    harmful actions against good-alignment NPCs will mark you criminal
    helpful actions against evil-alignment NPCs will mark you criminal
    internal command target cursors shouldn't interfere with script target cursors
    Scripts have a 'controller' attached.  This is set to the spellcaster, or the
      character doubleclicking the item, etc.  ApplyDamage and ApplyRawDamage now
      send an EVID_DAMAGED event using the controller as ev.source
    Added uo::SetScriptController(who) - should be used to set controllers for
      traps and such
    EVID_ENGAGED events will be sent to NPCs targetted with hostile actions
    justice zone "entering" and "leaving" messages won't print if switching between
      zones where the messages are the same
    If 'enabled.pkg' exists in a package directory, the package will be enabled
      regardless of Enabled=1/0 in pkg.cfg.  If 'disabled.pkg' exists, both these
      will be ignored, and the package will be disabled.
    It's now possible to set a mobile's colors above 0xfff
    added mobile.cmdlevel; read-write, set to 0-5 (0-player, 5=test)

07/27/1999 - POLC077
==========
    weapon skills, tactics, and parry will cause stat gain from combat
      - note this is from ANY combat - GMs on rabbits, whatever.
    transmission buffer size increased to handle huge gump dialogs
    save time improved; tests show over 2x faster on Win98, almost 2x faster on WinNT
    Fixed the "you are already holding an item" bug on disconnect while dragging an item
    Unicode speech is now handled (ASCII character set only)
    Tooltip text can be specified in itemdesc.cfg
    'Name' can be specified as 'ObjtypeName' in itemdesc.cfg.  'ObjtypeName' is
      preferred. 'Name' is deprecated, and will not be supported after core 079
    Entries in pol.log will be timestamped
    Added logging for login/logout (with IP), and incorrect password presentation.
    new polcore() variables:
        uptime:  system uptime in seconds
        sysload: system load, 0-100
    Limited the crash stack backtrace to 100 frames
    LogSysload=1 in pol.cfg will cause sysload to be logged each minute
    Corrected an error which could cause CPU usage to rise to 100% until shutdown
    Removed dump of message type 0x69
    New internal text command: "log_profile"  logs script profile data
    New internal text command: "log_profile_clear"  logs script profile data, clears counters
    new polcore() variables: bytes_sent, bytes_received
    SendEvent now functions as advertised
    new members for multis: multi.items and multi.mobiles
      - arrays of supported items/mobiles
    Names of scripts that cause access violations will now be logged.
    Fixed an AV condition on skills with no script defined
    Target() takes an 'options' parameter.  This should be either TGTOPT_CHECK_LOS or
      TGTOPT_NOCHECK_LOS.  The default is TGTOPT_CHECK_LOS.  Some scripts currently
      call Target( someone, "" ) -- this should be changed to Target( someone ) ASAP.
      For now, this is treated the same as TGTOPT_CHECK_LOS.
    Corrected another cause of client i/o thread infinite loops.
    Autodefense will target an attackable opponent or hostile, rather than
      exclusively trying to hit your opponent.
    Added the beginnings of aggressor and criminal flagging.
      Supported:
        - criminal flagging (2 minutes) for attacking an innocent
        - aggressor flagging (2 minutes) for attacking first
        - extension of these timeouts for continued behavior
        - pets ordered to attack will affect their owner's flags
        - attacking a pet is like attacking the owner, as far as flagging is concerned
        - name coloring
      Not supported:
        - any repercussions whatsoever for being a criminal
            (except that others can attack you without becoming criminal)
        - any repercussions whatsoever for being an aggressor
            (except that those you are an aggressor to can attack you freely)
    Corrected an error in the task scheduler, discovered while coding aggressor flagging.
      This may also affect autodefense.
    Ships will no longer be able to sail off the map

07/06/1999 - POL076
==========
    data/accounts.txt will be re-read after it has been modified (must remain
        unchanged for 10-40 seconds).
    basic::pack( expr ) and basic::unpack( string ) added.
    Config/Data file parser modified to handle arbitrarily long properties
      (mostly for very large stored arrays)
    Trailing spaces in config/data files will be trimmed.
    arrays will display their contents when printed, instead of "<objarray>"
    Weapons will have a 1% chance (was 25%) per swing of losing 1 HP
    Temporary kludge for combat skill gain:
        On each swing:
            attacker gets 30 raw skill points in his weapon skill
            attacker gets 15 raw skill points in tactics
            defender gets 15 raw skill points in tactics
            defender gets 30 points in parry, if a shield is equipped
    GetObjProperty/SetObjProperty etc can store arrays of integers, strings, reals, and arrays
    arrays can be tested for equality.
    Fixed two memory leaks in the script compiler
    Skill points will always be awarded for skills with <= 10.0 value
    items which are 'SaveOnExit 0' will use a different serial number pool,
      from 0x4F000000 to 0x4FFFFFFF
    bugfix: fixed some problems with LOS checks on doubleclick (and others)
            if you stood in the same place as, say, an iron ingot, you couldn't
            open a container in your backpack; this has been fixed.
    ecompile can take '-r directory' as a parameter, will compile .src files in
        directory and all subdirectories
    bugfix: 'npctemplate' custom prop on corpses will now work.
    Adding support for packages: see also polcore/docs/packages.txt for detail.:
        - 'item.usescript' can specify ':pkgname:script' format scriptnames
        - PKG.CFG can specify 'version', 'requires pkgname version', and 'conflicts pkgname'
        - AppendConfigFileElem and UnloadConfigFile will accept ":pkgname:cfgfile" syntax
        - Anywhere you can specify 'script' that would specify a script in a package,
          you can now specify ':pkgname:script' to reference a script in another package
        - Spells can be put in packages (put a spells.cfg in package directory)
        - Packages can contain 'skills.cfg'
        - ReadConfigFile( "::itemdesc" ) will access data in main itemdesc.cfg as well
          as all package itemdesc.cfg files.  Same for "::skills.cfg" and "::spells.cfg"
        - ReadConfigFile handles new formats to specify a config file in another package

05/31/1999 - POL075
==========
    DoubleclickRange can be specified in itemdesc.cfg
      (archery buttes will be broken until their configuration uses this)
    Linux build: Ctrl-C and 'kill [pid]' are caught for save/shutdown
    Added uo::polcore() - returns an object that can be used to query system data
       - itemcount
       - mobilecount
    regions/regions.cfg defines justice regions - only enter/leave messages are printed.
    regions/regions.cfg defines music regions
    ListMobilesInLineOfSight will not return mobile passed as the center
    Linux build: fixed bug which was causing 100% cpu usage always
    Startup output for start.src will be shorter
    Line of sight to items changed: will be from head of mobile to center of item
    Doubleclick limits added: must be range <= 1, and have LOS.
    ~IN[spellnum] can be used to cast spells
    Spells above the standard 64 can be defined (use ~IN to invoke)
    NPCs have a 'setmaster(master)' method, which right now only allows renaming
    Events sent to an NPC will be discarded if more than 30 events are currently queued
    web server can now serve .gif, .jpg, and .jpeg files
    scripts: "var" can be used instead of "global" and "local"
    scripts: object methods are here - doors will have them first.
    scripts: "array(2, 54)" syntax is deprecated in favor of "{ 2, 54 }"
    scripts: C-style " /*   */ " comments will function again
    scripts: old, non-"fully bracketed" syntax will no longer compile.
    Custom properties prefixed with '#' will not be saved with game state.
    SendDialogGump now returns an 'integer hash' with the results.
        var x := SendDialogGump(...);
        x[0] is the exit-button pressed
        x[button id] returns 1 if that button was pressed/selected
        x[text entry id] returns the string contents of a textentry field
        x.keys returns an array of all the keys
        See scripts/textcmd/test/exgump.*
    Added GetWorldHeight(x,y) - returns lowest point above map and lowest statics
        (It's supposed to, anyway.  It actually returns the point atop the
         highest static, but it works for most dungeon teleporters, so I'm leaving
         it broken for a while.)
    internal changes to resource region stuff; more testing before X3
    mid() is now unavailable (has always been broken)
    ghosts will speak ghostspeech (no hooks for spirit speak yet)
    doors are scriptable; door.src autocloses, and plays sound effects.
      - door objects have an 'isopen' property
      - door objects have 'open()', 'close()', and 'toggle()' methods
      - 'isopen': reports if the door is open or closed
      - 'open()': opens the door  ("door.open();" in script would open it)
      - same for  'close()' and 'toggle()' - they change the state of the door.
      Not sure how well this interface will work, or how intuitive it'll be.
    bugfix: SetObjProperty etc now work with Multis
    SystemFindObjectBySerial will find multis

05/18/1999 - POL074
==========
    Spawner rewritten; basic spawn limiting is in place.
    EVID_ITEM_GIVEN event added for items dragged onto NPCs
    Wrestling will no longer do 0 damage after being used a few times
    item colors set by scripts will be limited to 0-0xFFF
    The following types of scripts run at priority 100, instead of critical:
      - spells
      - item use
      - walk on
      - skill use
      - text commands
    The following types of scripts still run critical:
      - character creation
    DestroyMulti will destroy houses, moving their contents to the ground.
    NPCs will have a ".npctemplate" member
    "CacheInteractiveScripts" in pol.cfg forces disk reloads on use for some scripts:
      - text commands
      - item use
      - walk on
      - character creation
      - www pages
      - spells
      - skill use
    Added uo::StartSpellEffect(who,spellid): start the spell script
    Added uo::GetSpellDifficulty(spellid)
    Added uo::SpeakPowerWords(who,spellid)
    Corrected an error where config file/elem variables couldn't be passed to functions
    spawns.cfg can take 'rect' entries
    combat.cfg has a param for displaying a message on successful parry.
    Multithread mode is stable.
    CDbl(val) added - convert to double
    ".setskill" now takes base-values instead of raw-values, so
      ".setskill 25 60" will set Magery to 60.  It'll actually set it to
      59.9, because of a base->raw conversion bug, so don't panic.
    Fixed a resource leak if you set 'decayat' on an object...don't ask.
    More stuff for houses:
      - Empty space is required between houses:
        - 2 tiles east-west
        - 6 tiles north-south
      - Houses cannot be built on top of mobiles or items.
      - Houses must sit on level ground.
      - Houses cannot sit on trees, rocks etc, or have them directly adjacent to it.
      - Note, it's still possible to create houses in annoying places.. *sigh*
    'cprop' and 'strprop' entries in itemdesc.cfg will be added to new items
    Internal clock granularity is now 1/100th second.
    CreateMultiAtLocation will function for houses, and will create doors and signs.
      - house.components will be an array of all these items
      - each component will have a 'house_serial' custom prop with the serial #
        of the house.

05/09/1999 - POL073
==========
    Rudimentary web server added.  Set WebServer=1, WebServerPort=8080 in pol.cfg,
      then go to http://localhost:8080.  The default website only has a
      "show online characters" page, but that's just the beginning!
      This only works in multithread mode, which is unstable on exit,
        so this is really only for playing around at this point.
      Default operations allows access only from localhost.
    Weapon animations can be set - 'Anim' in wepndesc.cfg
    Weapon sounds can be set - 'HitSound', 'MissSound' in wepndesc.cfg
    NPCs will no longer step into the same tile as another NPC.
    WebServerLocalOnly (defaults to 1) in pol.cfg will restrict web server access
    "AttackHitSound" and "AttackMissSound" can be specified in npcdesc.cfg
      - Note that to do this, you have to have an AttackSpeed entry too
    Added uo::SendTextEntryGump() - used for those input box thingies
      - see uo.em for parameters and constants
      - Added ".testtextentry" to play with it
      - numerical mode isn't tested yet, but will for sure return result as a string
    Added uo::SendDialogGump( who, layout, textlines ) - see uo.em and testgump.src
       We need more 'testgump' scripts for radio buttons etc
    RandomInt() will return an error if its parameter is <= 0
    Performance enhancements to PC movement with lots of ingame items
    The following functions will automatically convert a 'name' to an 'objtype'
      (they automatically call GetObjtypeByName if a string is passed)
      - CreateItemAtLocation
      - AddMenuItem
      - ListItemsNearLocationOfType
      - CreateItemInContainer
      - CreateRootItemInStorageArea
      - FindObjtypeInContainer
      - CreateItemInBackpack
    ".createstack" can take an objname
    "Movable" property added to itemdesc.cfg - overrides client datafiles
    Item descriptions in merchant windows will no longer include redundant amounts
    "Desc" property in itemdesc.cfg will now be used
    "MOVEITEM_FORCELOCATION" can be added to the z-coordinate in
      MoveItemToLocation to force acceptance of the position.
    ControlScript in itemdesc.cfg is now functional
    CreateScript in itemdesc.cfg fill now run for:
      - CreateItemAtLocation
      - CreateItemInContainer
      - CreateItemInBackpack
      If the CreateScript succeeds (returns a 'true' value, or nothing) creation
      will be allowed; if it returns a 'false' value, creation will fail.
    DestroyItem will consult the DestroyScript, if any
    Decay will consult DestroyScript, if any.  Decay counter is not reset;
      checks will continue on each decay sweep.
    os::parameter() is gone
    Added os::set_priority( priority ) - set script priority from 1 to 255
      - higher priority scripts will get more CPU time
      - in CS terms, priority is just quanta



04/29/1999 - POL072 (ouch, too many changes! sorry!)
==========
    dot-commands will no longer unhide the character issuing them
    'stealthsteps' member added to mobiles
    GameMasters and ghosts can walk through doors
      GM is defined as graphic == 0x3db, not humans wearing a GM robe
    NPC stats in NPCDESC will be specified in die-roll, base values
     (to come: hp, mana, stamina default to associated attributes)
    'Unhides' property added to skills.cfg, mainly for stealth

    Fixed an AV condition if a stat window was opened on a just-dead NPC
    Skill values in NPCDESC.CFG are now 'base' values, dieroll-form
    Skill values in NPCDESC.CFG can be named using Skill Name (skills.cfg)
      rather than skillid (for example, Wrestling instead of Skill43)
    Skill values in PCS.TXT and NPCS.TXT will use skill names (and raw values)
    'concealed' flag added to mobiles.  Similar to 'hidden', but is only
      cleared explicitly (who.concealed := 0).  Only effective against
      mobiles below your command level - so Admins can always see GMs, etc.
      The following functions will _always_ exclude 'concealed' mobiles:
        ListMobilesNearLocationEx
        ListMobilesNearLocation
        ListMobilesInLineOfSight
        ListHostiles
        Note that these affect spells cast by higher-level beings.
    Speech code modified to accomodate 'concealed' flag.  A side effect is
      that speech by non-warmode ghosts should no longer be seen by non-ghosts
    Some events will not be generated for hidden and concealed mobiles:
       - speech
       - entered area, left area
       - opponent moved
    'frozen' and 'paralyzed' members added to mobiles
      - paralyzed is cleared when ApplyRawDamage is called
      - paralyzed and frozen are cleared upon death and resurrection
      - either block:
        - walking and running (MoveCharacter() functions will still work)
        - casting
        - skill use
        - item doubleclick (except paperdoll)
        - targetting of any kind
    '.freeze' and '.thaw' GM commands added

    armor.cfg moved to armrdesc.cfg
      format merged with itemdesc.cfg
          ".armor" is gone = ".create" can do it now.

    weapon.cfg moved to wepndesc.cfg
      format merged with itemdesc.cfg
      ripples to:
          equipfromtemplate
          ".weapon" is gone - ".create" should be able to do it now
      Instead of WeaponTemplate names, weapons can just use different objtypes
        to have different capabilities with the same graphic
      This opens the door for magic weapons etc.

    Experimental multithreading mode: Multithread=1 in pol.cfg
      It's pretty unstable, typically crashing on exit.  Singlethread (default)
      mode is unaffected.
    Config properties can be accessed with "." syntax, rather than using
      "GetConfigInt", "GetConfigString" etc.  Types (integer, string, real)
      determined automatically.
    Config files can be searched for elements with "[]" syntax:
      config[6] searches by integer key, config["WarAxe"] searches by string
    SendSellWindow() sort of works; any merchant will buy and item with a
      nonzero "VendorBuysFor" price in itemdesc.cfg.
!!  Be sure to recompile merchant.src
    MoveToward etc will move around simple obstacles


04/13/1999 - POL071
==========
    files in data/ will use ".txt" extension
       existing .dat files will be converted automatically
    Boats are no longer broken (objtype/graphic holdover)
    Boat components will be created non-movable
    Both attacker and defender must be visible for attacks to occur
    Weapon templates can now share the same objtype
       (this is a temporary solution, pending a bit of rework)
    Holds use the correct gump (itemdesc.cfg)
    Script scheduler modified to improve performance
    Item decay scheduling modified


04/09/1999 - POL070
==========
    Added npc::Wander() - moves, usually forward, sometimes turns
    Added ai/killpcs.src, made default_AI redirect to these for some monsters
    Another try at making corpses unmovable.
    NPCs will be default only pay attention to spoken text @ 1 pace away
    Boat components will be set for no-decay :)
    Boats should respond to "right", "left", "drift right", and "drift left"
    Tests for 'walk-on' scripts will no longer depend on the uo client files
    Merchants will run critical, to be more responsive
    SendBuyWindow should handle larger inventories
    Output trimmed in several scripts
    coun, seer, and gm textcmd directories now exist
    MoveToward/RunToward will now try adjacent moves if a direct move is blocked
       (doesn't work yet..oops!  take a look, it's funny)
    Client encryption keys are now read from POL.CFG.
    Client 37 supported; core now supports RemoveTrap and Stealth skills.
    'invul' priv/setting added.
    PC corpse decay will dump contents to the ground; all others will not.
    The server should cope with T2A installations with no VERDATA.MUL
    Added uo::GetObjtypeByName( name ) - uses NAME prop from itemdesc.cfg
    Doors are now configured in itemdesc.cfg
    CreateItem.. functions will refuse to create a nonstackable with amount > 1
    Items now have a ".decayat" member.  Set to zero to disable decay,
      or gameclock() + number_of_seconds to make an item decay in the future.
    Added uo::GetEquipmentByLayer( character, layer )
    0x3ff will be the highest allowed mobile graphic
    non-'movable' items will no longer decay.


03/30/1999 - POLC069           
==========
    NPC corpses will contain an "npctemplate" property (use GetObjProperty)
    ".destroy" text command moved to a script
    "misc/oncreate.src" will run critical on character creation.
        - this is where initial equipment should be created.
    "item.movable" added - default depends on item type
    Added option to POL.CFG: "LogScriptCycles"  If set to 1, a breakdown of
      how many instructions per script were executed will be written to pol.log
    Item decay is in.  Specify 'DecayTime' in minutes in itemdesc.cfg per 
      object type.  The default is 10 minutes.
    Corpses are no longer "SaveOnExit 0"
    Split OBJECTS.DAT into POL.DAT, PCS.DAT, PCEQUIP.DAT, NPCS.DAT, 
      NPCEQUIP.DAT, and ITEMS.DAT.  Each of these contains a descriptive comment.
    Added uo::ListHostiles( character, range, flags );
    "--lan--" in servers.cfg will use your LAN IP address (192.168.*, 10.*)
    'const' declarations can be specified in .EM files

03/23/1999 - POLC068
==========
    Added "character.ar_mod" AR modifier (use same as strength_mod, etc)
    Added ".setarmod" text command to test
    Added uo::DisconnectClient( character ) [note still no way to ban]
    Added ".kick" text command to admin
    Scripts waiting for a menu selection will return if the client disconnects
    Added "character.weapon" returns weaponref to equipped weapon
    Added "weapon.skillid" returns SkillId for a weapon
    Corpses should be immovable, by clients and scripts
       [I'm not sure what happens if a corpse is on a moving boat --
        has anyone tried?]
    ".create" implemented as a script (builtin renamed to ".i_create")
    The structure returned by SelectMenuItem2() will contain the color
    Tweaked loot.inc so it doesn't create hundreds of individual gold pieces

03/19/1999 - POLC067
==========
    SaveOnExit logic will now use objtype, not graphic
    Objtype is specified in the key-position in itemdesc.cfg
      This means only one objtype can be specified per element.
      Itemdesc.cfg still has the ObjType 0xHHHH entries, for compatibility.
    object.facing is now writable.
    Added cfgfile::GetConfigStringArray
    You can buy stuff from merchants.  Try ".createnpc merchant"
      - See merchant.src, mrcspawn.src, mrcspawn.inc, mrcspawn.cfg
      - It's not complete/perfect yet, but works for the basics.
      - The whole merchant inventory spawn thing is overly complex; considering
        making each merchant NPC AI script respawn its own inventory, but
        that's all scriptside, so easy to change later


03/09/1999 - POLC066
==========
    Fixed server AV on skills window opening
    Added uo::GetRegionString() for config data per resource-region.
    Reordered parameters of GetHarvestDifficulty and HarvestResource.
    Character creation will be rejected if a stat was specified < 10
    Stats will be stored as raw values, same scale as skills.
    StrAdv, IntAdv, and DexAdv can be specified in skills.cfg.
      - Format is "chance points", where chance is a percentage, and 
        points is a die-roll specification.  Examples: "1.5 1d4", "75 1"
      - advancement is done, but sometimes doesn't display the new value
    Some additions to error messages displayed for bad die-roll specifiers.
    Starting skills will start near (known bug) values specified.




02/05/1999 - POLC065
==========
	Spells.cfg entries can specify "animation", the spell casting animation.
	    The default is 0x10
	Added uo::PlayStationaryEffect( x,y,z, effect, speed, loop );
    Added uo::DestroyRootItemInStorageArea( itemname );
    Added os::system_rpm();
    Weapons have 'quality' and 'hp' read-write properties.
    Weapons also have a readonly 'maxhp' property, which is the calculation of
      (template MaxHp) * (weapon quality)
    Damage done is now (random damage) * hp / (template maxhp)
    Added ".smember" test textcmd.  ".smember quality", then target, will
      show you "[targetted].quality" for example.
    Non-projectile weapons will take 1 hp damage occasionally when they hit
       (25% chance)
    Movement will reset the swing timer if you have a projectile weapon equipped

02/03/1999 - POLC064
==========
	Maps will display now, if they have a location set.
	  (see textcmd/test/makemap.src)
	Map items have xwest,ynorth,xeast,ysouth,gumpheight,gumpwidth properties
	Some fixes for boat creation.
	Added uo::GetMapInfo(x,y)
	Resource types are now defined in regions/resource.cfg, so others can be added.

02/01/1999 - POLC063 - Pol Core 063 
==========
	ecompile will check the environment for ECOMPILE_PATH_EM and
	  ECOMPILE_PATH_INC.  If .em or .inc files are not found by
	  searching from the current directory, these paths will be
	  searched.
    Objtype and Graphic ID are split; 'graphic' is now read/write,
	  while 'objtype' is read-only.  'objtype' can be anything from
	  0x0000 to 0xFFFF; Values above 0xF000 are reserved by the system.
      'include/extobj.inc' defines some values.
	Doors will use objtypes 0xF000 - 0xF003.  These open in different
	  ways; it should now be possible to create all types of doors.
	Ship components will use objtypes from 0xF010 to 0xF013.
	  Existing ship planks and holds will no longer function.
	It is now possible to create objects with objtypes >= 0x5000

01/27/1999 - POLC062X - Pol Core 062 (Experimental)
==========
	Added 'enum' facility to script compiler (see above, and docs)
	Added array( 1,5,9,... ) syntax to script compiler/executor
		- scripts which use this will only work with Core V062+
		- Note, 'local a := array' now obsoletes 'local a array'
	Next non-experimental release after a script/config release can
	  be made.

01/26/1999 - POLC061X - Pol Core 061 (Experimental)
==========
	Added ConsumeMana( who, spellid )
	Added ConsumeReagents( who, spellid )
	Added AppendConfigFileElement( configfile, elemtype, elemkey, properties );
	Added UnloadConfigFile( configfile );
	Added ListEquippedItems( who );
	Added ListObjectsInBox(x1,y1,z1,x2,y2,z2);
	Added ".writequip [tag]", writes your equipment to equip.cfg
	Added to textcmd/test: ".consmana", ".consreg", ".listbox"

01/24/1999 - POL060Ex - Experimental, dev-only release
==========
	That means, doesn't go to any test system! developer machines only.
    Performance enhancements to ListMobilesInLineOfSight
    Added uo::SendPacket( to_whom, packet_hex_string );
    Added ".sendpacket" to test this
    Reorganized locations of scripts.
      AI scripts go in ai/
      Skill-window skill scripts go in skills/
      Item-use scripts go in items/
      Startup scripts go in startup/
      4 leftover scripts go in misc/
      .inc files go in include/
      (many .inc files are still in util/ - they'll be okay there for a while)
      The only script in /scripts is start.src
	Changes made to segment map into zones for item/mobile existence,
	  so 'search near' and line-of-sight type stuff will take far less time.
	  (This is why it's devel-only - we need to beat on this)
	  Only a few functions take advantage of this - the first step is to get
	  all the items and mobiles into the segmented storage.


01/23/1999 - POL059
==========
    New event types: EVID_ENTEREDAREA, EVID_LEFTAREA, EVID_OPPONENT_MOVED
        - More to do yet on these, but they will tell you whenever anything
          enters or leaves a given range threshold
        - See CSTGUARD.SRC, as always :)
    spawner.src rewritten somewhat - more to come
    It should be impossible to set an item's color to a color that will
      cause a client crash.
    Added cfgfile::GetConfigMaxIntKey(config_file)
    uo::EnableEventType renamed to EnableEvents, takes an optional 'range'
    Added uo::DisableEvents
    Tachometer added.  ".rpm" to view last minute's game-loop iteration count.
        - "WatchRpm=1" in pol.cfg will display every minute, also.
        - My P133/Win98 gets around 300, P166/WinNT gets around 560
           (hmm, those are debug build.. release: ~800 P133/Win98)
        - This number is highly dependent upon # of NPCs
    Pirate.src changed to use EVID_ constants from include/eventid.inc

01/21/1999 - POL058
==========
    Inscription updated to build smaller menus, and other fixes (DT)
    Scripts updated to correct boolean-return values: (DT)
        - tinkering
        - creature_spellcast
        - carpentry
    Alchemy re-implemented as OSI-style. (DT)
    Text commands split into command levels.
        - textcmd has five subdirectories: admin gm seer coun player
        - Characters can have a CmdLevel property in OBJECTS.DAT, which specifies
          which of these they fall under.  'player' is the default.
          CmdLevel _must_ be one of these, or not specified.
        - All text commands moved to textcmd/admin
        - All "built-in" text commands assumed to be admin level.
    Client V 0.36+ (until they change again :) only will be accepted.
    Equip.cfg now detects decimal/hex values for objtype and color, like everywhere else.
      (hex only was by design, but not commented, and different from all else, so..)            
    Fixed a crash bug in compiler if ';' was the first effective statement
    AI updated, consolidated further into default_AI with new natures (rje)
    Several AI scripts removed; use default_AI instead.
    Energy bolt unbroken (DC)
    Healers will heal poison and damage (DC)
    Field spells updated for different orientations (DT)
    Fire field, poison field use walk-on scripts (DT)
    Spellbook.src updated to put the scrolls in the spellbook (DT)

01/18/1999 - POL057
==========
    Added SplitWords( text ): returns array of words in a string 
        (space-delimited only, no commas, sorry)
    NPCs will have their template name follow "NPC" in objects.dat
    NPC Templates can specify AttackSpeed, AttackDamage, and AttackSkillId
      these are exactly the same as Speed, Damage, and SkillId properties in
      weapon.cfg; in fact, a weapon template is generated for each NPC.
      This has some repurcussions if you, say, create an ettin, then edit 
      npcdesc.cfg to change damage, then create another ettin.  The new
      values won't take effect until a system restart.
    SelectMenuItem will return an error if the menu is too large.
    AR can be specified in NPC templates, in standard die form.  This will be
      "rolled" on creation, then saved with each individual creature.
    Spellbooks may be opened with the Open Spellbook macro, if the spellbook
      is equipped or in the top level of your backpack.
    Spells may be cast directly from spellbooks.
    Formulas, animations updated for spells:
        - Agility
        - Bless    (plays anim on caster?)
        - Clumsy
        - Cunning
        - Curse
        - Feeblemind
        - Mass Curse
        - Strength
        - Weaken
        - Greater Heal
    Explosion spell added


01/17/1999 - POL056
==========
    RequestInput( character, item, text ) - displays message, gets next input line
    ReadGameClock() - elapsed game seconds counter
    Alchemy, Inscription, Blacksmithy, Carpentry, Tinkering updated (DT)
    Loot script updated (DT)
    Recall rune double-click script added
    Compiler updated; would sometimes not emit the "implicit return" at end of functions.
        - this affected make_blacksmith_items, at least.
    make_blacksmith_items updated to use (menuselection.objtype) (ES)
    Script profiling info will only be displayed if ProfileScripts is set in watch.cfg
    default_AI changed to kill creatures with unknown natures.
    Corpses will have all the custom properties that the creature had when living.
    Limited skill delay added.
        - Set a "Delay" property in skills.cfg.  Other skill use will
          be disabled until 'n' seconds after the initial skill was begun.  Note, we
          may want to change this timer to start after the skill is complete,
          or after the skill script calls Detach().
        - Only Hiding has a skill delay at this time.
        - No attempt is made to disable skill use in item-use scripts.
          (So, you could hide, then turn around and use a hammer etc)
    Net-negative stat modifiers should be handled correctly.
        - If they would modify the stat below 1, it is assumed to be 1.
        - the real modifier is "hidden" so scripts don't have to do anything special.
    Fixed stat-modifying scripts (durations,amounts to be debated) (ES)
        - Agility
        - Bless
        - Clumsy
        - Cunning
        - Curse
        - Feeblemind
        - Mass Curse (pretty major rewrite)
        - Strength
        - Weaken
      The fix made was to change the stats by an amount, then change
          them back by the same amount - this way, curse can cancel
          bless, etc, but a weak curse will only partially cancel
          a strong bless.
      No attempt was made to fix the animations, which don't appear.
    Added animations, sounds to the following spells:
        - Cure
        - Dispel Field
        - Mana Drain (also, uses resist vs magery)
        - Mana Vampire (also, uses resist vs magery)
        - Mind Blast
        - Flame Strike
    Fireball spell added
    Heal spell added
    Greater Heal spell added
    Damage changed on the following spells:
        - Magic Arrow
        - Lightning Bolt
        - Harm
        - Flame Strike
    Damage messages for Earthquake are sent private (Thank you!)
    strength, intelligence, and dexterity object members will reflect
       the modified values, not underlying values.
    Chain Lightning moved back to 7th circle
    Meteor Swarm moved back to 7th circle
    Docs updated for new UO.EM functions
    '.objtype' is writable for mobiles.  If world state is saved with this
      modified, such modifications will become undone when the system reloads.
    ".setobjtype", ".showstats", ".powerup" added

01/16/1999 - POL055
==========
    Timer granularity improved  (scripts, combat timers, casting delay timers)
    npc::Move/Run functions use the following formula for timeout:
       after moving, sleep (1000 - dexterity * 3) milliseconds
       minimum is 250 milliseconds.
       If running, halve this (min. 125 ms)
       Give me a better formula, and I'll use it.
    os::sleepms( milliseconds ) added.
    Castle Guards always run critical.
    util/skillid.inc filled in.  Scripts modified to use.
    Pirate script added, equip.cfg updated with an outfit (Rob)
    default_AI updated (trapper) (Rob)
    Access violations will be written to the log file.  Email any
     that hit you to syzygy@pobox.com
    "showadv" privilege/setting will show raw skill updates as they occur.
    Comments at the top of OBJECTS.DAT will show mobile/toplevel item count.
    Game time counter added (can't access from scripts yet)

01/15/1999 - POL054
==========
    "SelectTimeout" option in POL.CFG.  Set to 0 to hog the processor.
    Added EquipFromTemplate(npc,template) - equips from EQUIP.CFG by name
    Internal: build mode changed to multithreaded.
    "--ip--" can be substituted for IP in SERVERS.CFG; uses the first 
      non-127.*, 192.168.*, 10.* IP address found.
    Compiler bug fixed, where in some cases functions would be called incorrectly.
      This afflicted skeleton and default_AI, and likely others, resulting in
      ever-increasing memory usage and incorrect behaviour.
    Telekinesis added (DC)  
      (I notice it's a bit too powerful: can take equipped items, 
       and items in any container - syz)
    Detect Hidden to pit Detect Hidden versus Hiding (DC)
    Skills updated to use non-difficulty-based CheckSkill:
        Eval Int, Fletching, Healing, Item ID, Musicianship, Spirit Speak,
        Taste ID, Tracking, Hiding
        "Point Value" also increased on these.
        (lumberjacking is and should be difficulty-based, due to resources)
    Casting delay added.  Delay, in milliseconds, can be set in CIRCLES.CFG.
      Note, the delay is rounded to seconds ((delay+500)/1000).
      This will be true until timer granularity in general is improved.
      Also note, the animation isn't played long enough.
    Client disconnect with target cursor active handled appropriately. 
    Added GrantPrivilege( chr, priv ), ".grantpriv priv" + target
    Added RevokePrivilege( chr, priv ),".revokepriv priv" + target
     (see docs for info on privileges/settings)
!!! Script "case" syntax modified to disallow bare-string tags.  Misspellings
     of things like UOBJ_PURPLE_POTION were being seen as strings, and
     not flagged as errors.  All scripts that used the offending syntax updated.
    Changes to carpentry, tinkering, blacksmithy for repair
    Loot on corpses added


01/12/1999 - POL053
==========
    "color" is now read-write, for mobiles and items.
    ".mycolor", ".showcolor", ".setcolor" text commands added.
    "name" is now read-write, for mobiles and items.
    ".setname" text command added.
    If CheckSkill is passed a negative value for difficulty, it will make a
      non-difficulty based skill check.  If successful, 100% of points are awarded.
      The percentage chance will be the effective skill (min 2, max 98).
      In the future, perhaps different curves will be defined in SKILLS.CFG.
    Characters can be deleted.
    Mining updated (DT)
    alchemy.src, alchemy2.src, drink_potion, eat, poison_skill updated (DT)
    taming.src updated (DT)
    Docs on Alchemy, Blacksmithy, Inscription, Tinkering added (DT)
    Start of resource system - local depletions only, so far (see lumberjack.src)
    Added GetHarvestDifficulty()
    Added HarvestResource()


01/10/1999 - POL052
==========
    "TemplateName" in NPCDESC is gone.  The tag now follows "NpcTemplate", so NPCDESC.CFG
       can be accessed through the CFGFILE module.
    Updated all entries in NPCDESC.CFG to follow this format.
      (Note many entries in NPCDESC still don't have "natures" matching default_AI,
       so they just exit, and so stand around)
    Added a default: clause to default_AI which syslogs when an unknown nature comes up.
    ".script" read-write property added to NPCs. (writing doesn't restart the script)
    Added uo::RestartScript( npc )
    Detect Hidden skill added (DC)
    Earthquake spell added (DC)
    Mana Drain spell added (DC)
    Mana Vampire spell added (DC)
    Object reference added to docs (help welcome, class hierarchy visuals esp.)

01/09/1999 - POL051
==========
    Documentation added for 26 script functions
    Changed many script names in NPCDESC to default_AI per Rob's instructions
    Speech event types will be "speech", not "Speech"
    Scripts updated to check for either of the above possibilities
    Script errors in functions will display the line # of the error, not the function.
    "engage" and "disengage" event types added (see docs)
    Added EnableEventType( eventtype ) 
    "damage" event type added
    npc::move() can take a number.  0=N,1=NE,2=E, ..., 7=NW, 8=N, ...
      (so, move( self().facing-2 ) turns left, for example)
    See CSTGUARD.SRC for an example of a script using the new events.    

01/08/1999 - POL050
==========
    Internal: STLport used rather than MS STL
    Added MoveItemToLocation( item, x, y, z )
    Added MoveItemToContainer( item, container, x := -1, y := -1 )
    Added boat::SystemFindBoatBySerial( serial )
    Added EquipItem( character, item )
    Added ".whereship" command (target ship deed)
    Added ".equip" command
    Added ".moveitem" command
    Added ".movetocont" command
    Items in bankboxes should be targettable
    Light levels will be resent even if you don't move between transportation
    Scripts that execute 500 or more "instructions" will have profiling information logged.
    Files in the devel distribution will no longer be read-only
    Script .ECL files will be included in the devel distribution.
    AI scripts reorganized (Rob)

01/07/1999 - POL049
==========
    Ship holds are now locked on creation, and associated with the keys.
    First attempt at character logout on disconnect (no timeouts yet)
    Scripts must now use program foo(param,param,..) .. endprogram to get arguments
    SPELCAST.EM, SKILLUSE.EM, and ITEMUSE.EM are all history.
    text command scripts can use program .. endprogram to get arguments.
    All scripts converted to use program..endprogram to get args.
    Hiding skill added (DC)
    Healers added (DC)
    Invisibility spell added (DT)

01/07/1999 - POL048
==========
    All scripts updated to use function .. endfunction
    ".makeshipdeed" script added - creates a ship deed in your backpack (only 0x4000)
    ship deeds can be used to place ships. They create keys and a deed certifying ownership.
    the "." member operator will have higher precedence than the unary operators.
    script functions can be called before they are defined.
    unused script functions will not be included in .ECL files.
    Corrected a precedence error in compiler - ev.text["bank"] will work correctly now.

01/05/1999 - POL047
==========
    Fixed a compiler bug where 'default:' followed by 'endcase' would be flagged an error
    os::syslog( text ) function added - logs to pol.log and prints to console
    Entries in ITEMDESC.CFG can have more than one OBJTYPE property. Note that 
     the 'name' property in ITEMDESC.CFG is not used.
    ".objtype" is writable, for non-multi items only.  Use with caution! This should not be
      used to convert, say, an apple to a container.
    Object types and serial numbers will be stored in hex format in data files.
    "death" script will be executed on NPC death
    "chrdeath" script will be executed on player character death.
      - os::parameter() will return the corpse for each.
    Many AI scripts updated (Rob)
    SystemFindObjectBySerial( serial ) added - searches everywhere.
    Hidden characters who take damage will become unhidden.
    ListMobilesNearLocationEx(x,y,z, range, flags) added
      Add together constants in LISTEX.INC to build flags.
    CreateItemInContainer( container, objtype, amount ) added - almost forgot!

01/03/1999 - POL046
==========
    Some changes to resurrection so the rezzed won't see peacemode ghosts
    Newly killed characters should now see nearby ghosts.
    Beginnings of a hidden flag - ".hidden" property added to mobiles
     The following functions ignore hidden characters:
       - ListMobilesNearLocation
            This means firefield etc won't affect hidden characters, 
            for the time being.
       - ListMobilesInLineOfSight
     The following actions unhide a character:
       - Movement
       - Speech
       - Casting a spell
       - Using a skill
       - Double-clicking any item that 'RequiresAttention'
         (this isn't quite right - just a quick fix to allow container use)
     Note again that this is just a start - it doesn't take much thinking for 
      me to come up with something that won't work right with hiding. But 
      here's something to bang on.
    ".hideme" text command added.

01/02/1999 - POL045
==========
    case..endcase script construct added
    Taste Identification script updated to use case..endcase

01/01/1999 - POL044
==========
    foreach..endforeach script construct added
    Local variables in nested blocks can override local variables in their parent blocks.
    Major performance improvement to script engine 

01/01/1999 - POL043
==========
    Added ListMobilesInLineOfSight(object,range) - lists non-ghosts in line of sight
      within 'range' squares of object.
    ListMobilesNearLocation will no longer include ghosts
    Added ListGhostsNearLocation(x,y,z,range)
    Performance updates to script engine.  Scripts must be recompiled to benefit.
    Converted reflect_spell.src to reflect_spell1.inc
    Made ebolt use reflect_spell1.inc
    Added ListItemsNearLocationOfType(x,y,z,range,type)

01/01/1999
==========
    Rob:
     Tidied up creature include files, plus gave a makeover to
     default creatures.  

     No guarantees that the pack predators work as expected -- I
     didn't fix any bugs.  This was a code cleanup only, but the
     default_pack_predator is still a mess.

12/31/1998
==========
    Rob:
     added strprops to npcdesc.cfg:
        leaderText
        buddyText
        targetText
        aggression  (to replace the 'p' strprop)
     (by the way, critters now also use strprops "nature" and "alignment")

     split up creatureRoutines.inc into:
        spawn.inc
        conflicts.inc
        buddies.inc
        creature.inc
     all of these conform to the new eScript syntax.

     changed my scripts to conform to the new compiler, etc:
        robs_prey.src
        robs_predator.src
        skeleton.src
        robs_pack_predator -- has bugs (Dan?)

    added harm spell (untested)

12/31/1998 - POL042 (compiler only)
==========
    Changed the order of cleanup on shutdown, to correct an AV condition. 
    Fully-bracketed syntax now for all constructs:
        WHILE .. ENDWHILE
        REPEAT .. UNTIL   (replaces DO .. WHILE due to ambiguity)
        FOR .. ENDFOR
        FUNCTION .. ENDFUNCTION
      Scripts must use one form or the other, per type.  
      Non-bracketed forms are deprecated.  All tests in testsuite have been
      converted to use the new forms.
    Some escript docs updated
    Default parameters for functions can consist of any optimizable expression.

12/30/1998 - POL041
==========
    Added Distance( obj1, obj2 )
    NPCs will now get their scripts from the script repository, rather than
     each loading their own copy of the .ECL file.

12/30/1998 - ecompile.exe only
==========
    Compiler change - 'const' variables will be treated as constants.  They are also
     now case-sensitive.  This broke a few of the AI scripts.
     This has made .ECL files smaller, and will result in lower memory usage.
    Compiler changed to better handle expressions within brackets

12/29/1998 - POL040
==========
    "LOS blocked by" diagnostic messages removed
    Start script and spawned scripts have access to cfgfile module
    Light regions can be defined in regions/light.cfg
    Added SetRegionLightLevel( LightRegionName, LightLevel )
    Added SetGlobalProperty( PropertyName, PropertyValue )
    Added GetGlobalProperty( PropertyName )
    Added EraseGlobalProperty( PropertyName )
    Added EraseObjProperty( Object, PropertyName )
    Added ".setlight", ".getglobal", ".setglobal", ".eraseglobal", 
          ".eraseobjproperty" commands.


12/29/1998
==========
    added lotsa NPCs 
    added default_pack and default_pack_predator
    added .kill command
    modified .createnpc to give target
    added Skeleton (Rob)     
    added .goto command (.goto character_name)
    DefaultAI now has tamed commands built in. Most are working (except Guard)
    added summon creature,summon daemon,blade spirit,e-vortex,  and summon elemental spells
    added a bit 'o text to the tillerman in boat.src (Rob)
    added vortexAI -- chases the smartest guy around, and won't retreat
    added a 10-minute autosave

12/29/1998 - POL039
==========
    SaveWorldState() added
    ".savenow" command added
    Implemented a possible fix for server crashes on NPC death.
    Fixed a server crash bug when an NPC script resulted in its death.

12/28/1998
==========
    create musicianship skill (Rac)
    fixed healing (Rac)

12/27/1998 - POL038a [ecompile.exe only]
==========
    Fixed a bug in the compiler.  Scripts which used FOR loops would not clean up
    correctly, resulting in ever increasing memory usage if scripts ran a long time
    (ie NPC control scripts)

12/27/1998 - POL038
==========
    SetObjProperty now accepts value types of String, Integer, and Real.
    GetObjProperty will return the same type of object as was Set (String, Integer, or Real)
      MARK.SRC, GATE.SRC, and MOONGATE.SRC have been updated.  Note CInt() is still used when
      reading marked runes, in order to work with old marked runes.
      All properties previously created are assumed to be Strings.
    Skill## properties are optional in OBJECTS.DAT, and default to 0 if unspecified.
    Skill## properties are not written if they are 0.
    Found and fixed resource leak exposed by NPC death.

12/26/1998 (DT)
==========
    created default_predator, default_prey, and default_mean_predator AI:
    default_predator: depending on hunger level, will attack prey, non-predators, or other predators. Eats the meat whn done
    default_prey: runs from all predators
    default_mean_predator: like default_predator, but will always attack humans. (use for ettin, ogre, etc)

    added a bunch of creatures based on these scripts

    modofoed .makeregs to do all the regs

12/26/1998 - POL037
==========
    Fixed nasty server halt bug exposed by "NPCs don't make ghosts" update.

12/26/1998 - POL036
==========
    Killed NPCs will be destroyed, rather than sticking around as ghosts
        -- this sometimes leaves an orphan (leaked) object, but that's a smaller
           leak than _always_ leaving an entire ghost, with running script. :)
    Added RawSkillToBaseSkill();
    Added BaseSkillToRawSkill();
       -- note, both of these use a different "skill" scale from GetSkill.
          if the skill is 12.4, the "base skill" is 124.  (GetSkill would return 12)
          GetSkill returns _effective_ skill, which is just a simplified number from
          0 to 100+, modified by stats etc.
       -- These are slightly broken - RawSkillToBaseSkill(BaseSkillToRawSkill(x)) should
          always evaluate to x, but often evaluates to x-1.  Not sure what to do about this.
    IN operator for arrays added.  "if (5 in arrvar)".  
    ".ident", ".where" ".action", ".bcast" text commands moved to script
    ".resme" moved to script
    os::set_debug() function added.  "ecompile -i xx.src" to use.
    uo::CreateNpcFromTemplate( template, x, y, z, override_properties ) added.
        see textcmd/createnpc.src for an example

12/23/1998
==========
    added clumsy, weaken, feeblemind, strength, agility, cunning (really the same spell)
    added a few items to itemdesc so they'd disappear on shutdown
    added bless, curse, mass curse
    added tracking
    created default_AI, default_mean_ai, and default_meek_ai. default is to attack only if there's a human nearby and hp < maxhp. Mean automatically attacks humans; meek automatically runs from humans

12/22/1998 - POL035
==========
    Simple import facility added - imports and deletes data/import.dat if 
      present.  misc/world.dor.dat is appropriate for this.
    Itemdesc.cfg: "SaveOnExit" property, if specified as 0, will force a given
      item type not to be saved with game state.
    Boats can turn. They even convert tillermen and gangplanks, and rotate
      passengers - but not items.
    Boat scripts auto-start.
    Boats respond to the following commands: (see BOAT.SRC)
       forward, backward, turn right, turn left, 
       come about, furl sail, unfurl sail

12/21/1998 - POL034a
==========
    Script compiler works again.

12/21/1998 (DT)
==========
    added locked chests in carpentry
    added restore mana potions in alchemy
    added digging for clay (shovel on swamp)
    added Hellfire potion 
    added stamina potion

12/20/1998 - POL034
==========
    You can now open containers even if a skill or spell script hasn't Detach()ed.
    Items can fire scripts when walked upon. Set WalkOnScript in ITEMDESC.CFG
    Implemented Gate (see SPELLS/GATE.SRC and MOONGATE.SRC)
    Duplicates in ITEMDESC.CFG are now detected; commented duplicates out.
    Added ".createstack" text command
    Added ".setskill" text command
    Added ".makeregs" text command
    Added uo::GetRawSkill(character,skillid);
    Added uo::SetRawSkill(character,skillid,rawskill);
    Enhancements to script execution engine to speed start-times.
    Script compiler will look into 'include' files to determine if IF..ENDIF is used.
    Script compiler will no longer include source code in output .ECL files.
    Further optimizations to script compiler to reduce the size of .ECL files
    The boat control script is underway.
    Added boat::MoveBoatRelative( boat, relative_direction );
    Added uo::RegisterForSpeechEvents( at_object, range );
    Added uo::EnumerateOnlineCharacters();
    Changes to properties for mobiles:
        mana and stamina are now writable.  Be nice!
        strength_mod, intelligence_mod, and dexterity_mod added (read/write).  
          These are not saved with game state, so use for temporary changes.
        I may yet add a "SetTempStatMod(chr,stat,howlong)" function, which the 
        system would automatically maintain.  The advantage there is that faulty 
        scripts won't permanently grant stat mods, and stat mods _could_ be 
        recalculated from scratch.
            
12/19/1998 - POL033
==========
    Projectile weapons now consume projectiles
    Stackable items dropped into a container will be added to an existing
      stack if the combined stack would be <= 60000 in size.
    RandomDiceRoll() function added to UTIL.EM
    Hex() function added to BASIC.EM
    Doors are lockable, just as with containers.
    Dropped items will have their Z-coordinate calculated, rather than believing the client.
    Dropped items must be placed in an adjacent tile that the character could have walked to.
      If you try to put an item somewhere, and it appears at your feet, it means the server
      thought you weren't allowed to put it there.
    Items dropped on boats will now move with the boat.
      (There are still some oddities with items that are picked up, where an attempt
       is made to put them somewhere invalid; but these are longstanding anyway)
    Walking on water is no longer allowed, so it should be impossible to get stuck on the mast.

12/17/1998 - POL032
==========
    Boats automatically figure out they should move you if you walk onto one
       or teleport onto one. (Dropped items aren't handled yet) (If you .createnpc
       an NPC on a boat, it won't move with the boat either, I just realized)
    "locked" property (read/write) available on containers
       (Should ITEMDESC include a "lockable" property for containers?)
       locked containers will not be searched for reagents, and cannot be accessed.
    "corpsetype" property available on corpses - the object type of the corpse when alive
    Added PrintTextAbove( above_object, text );
    Added PrintTextAbovePrivate( above_object, text, character ); // send only to character.

12/17/98
==========
    Tinkering can now be used to make jewelry. Melt gold coins on a forge to make 
      gold bars, then use tinker's tools. 
    Tinkering can also do clay items. Use tinker tools on clay
    Added jewelry enchantment (use inscription on jewelry, then gems for charges)
    added corpse carving/chopping

12/16/1998 - POL031
==========    
    Numerous sweeping changes to support multis, particularly boats.
      (hopefully this won't be called the "instability patch" ;)
    Orcs won't blink when they attack or are hit. This is a temporary fix,
         until that stuff is config-file driven.
    MoveCharacterToLocation calculates the correct z-coordinate, based on the input
        Z-coordinate.  It is impossible to MoveCharacterToLocation to "under the map."
    MoveCharacterToLocation will refuse to move a character into a blocked location
        (blocked by a static object, a dynamic blocking object, or a multi)
    npc::move() will refuse to move an NPC into walls.
    some errors in z-calculation corrected.
    Multi-handling added for Z-coordinates.
    Multis are stored in MULTIS.DAT
    TO UPDATE:
       move all MULTIS to MULTIS.DAT

12/16/1998
==========
    Got a start on glass working. Use 0x1036 (hay, soon to be called sand) on a forge, 
      and you get glass. Use tinkers tools on raw glass to make stuff. Tomorrow I'll 
      have shovels work on beaches to make sand.

    Orcs work, sorta. Orcs will fight for dominance in the pack, 
      then start wandering around after their leader. They run away 
      when they get hurt. Next I want to add some speech, to see 
      if my speech system works for them. They still have the blinkies, though.


12/14/1998
==========
    use_stuff modified:. Previously the config file key was just the 
      objtype that you double-clicked. I changed it so it looks for a 
      string of used.objtype + use_on.objtype. The problem is that 
      cstr(objtype) results are decimal, so the key for a skull 
      (objtype 0x1dae) used on a kettle (0x09ed) is "7598+2541". 

    This way you can have a many-to-many relationship with items. 
       A head on a kettle, a head on a guard (for a bounty), a 
       head on a stick (for a headcicle) etc.

    cooking skill added

    Set up an npc_speech script. This script checks 2 config files: 
      npc_speech and npc_speech_limits, and returns an array. 
      Element 1 of the return is the string containing the speech, 
      and element2 is a sound for the creature. If it can't find an 
      appropriate element it looks for a default phrase/sound for the 
      creature and returns that. 
    npc_speech has 2 elements: speech an dsound. The key to npc_speech 
      is multi-part: the objtype of the creature, the event, and an 
      index (so a creature can have multiple sayings for each event). 
      npc_speech_limits sets the range of this index.



12/13/1998
==========
    bladed will carve kindling from trees
    
    
12/12/1998 - POL030
==========
    Spells will consume reagents.
    TargetCoordinates result will contain a ".item" member if an item was selected,
      or a ".mobile" member if a mobile was selected.
    It is no longer necessary to put "_OptionBracketed" at the beginning of scripts.
    CreateItemInBackpack will add to an existing stack, if the objtype is stackable
      and the resulting stack size would be <= 60000.
    Changed "verdata" handling, which sped up startup considerable.
    Added "multi" data loading, which slowed startup down again (but not as bad as before!)
    ".where", ".tele", ".bcast" - scripted text commands.

12/12/98
==========   

Added fishing, mining, and lumberjacking
Made some changes to bladed to support carving of fish, and (eventually) kindling
   
12/11/1998 - POL029
==========
    Spell words will be spoken, and "cast spell" animation will be played, on casting.
    "include" script directive added for module inclusion.  See CSTGUARD.SRC, DIST.INC
    text commands are now scriptable.  Put scripts in scripts/textcmd.
    keys in config files may now be strings.  All config file elements may be referenced
      by string value; only those beginning in a digit (0-9) can be referenced by number.
    character.backpack  - access to a character's backpack.
    target.objtype added to struct returned from TargetCoordinates
       (should be useful for fishing, mining, lumberjacking)

12/10/1998 - POL028
==========
    The script compiler will display the line number where errors are detected.

12/09/1998 - POL027
==========
    Added functions to 'npc' module:
        - WalkToward( object );
        - WalkAwayFrom( object );
        - RunToward( object ); 
        - RunAwayFrom( object );
        - TurnToward( object ); 
        - TurnAwayFrom( object );
    Added functions to 'uo' module:
        - ApplyDamage( character, damage : real or integer ); 
             // chooses armor, reduces damage, halves damage, applies what's left.
             // plays "i'm hit" animation, and kills if out of HP.
    Support for Tips added - create .TXT files in the TIPS/ directory.
    script names passed to start_script and run_script_to_completion may
      no longer have ".ecl" at the end.

12/09/98
==========
    Created a magic reflect script. To use it set the parms, then do a 
    start_script( "spells/reflect_spell",parms) INSTEAD OF 
    doing animation and damage in your own script. The parms are an array as follows:
     parms[1]  = caster 
     parms[2]  = cast_on 
     parms[3]  = moving_effect
     parms[4]  = object_centered_effect
     parms[5]  = speed                //for animatiom
     parms[6]  = loop                 //for animation
     parms[7]  = explode              //for moving animation
     parms[8]  = rawdamage 	          \
     parms[9]  = thedamage            / don't use both of these, or both will be applied
     parms[10] = scriptname 
     parms[11] = script_parms*
 
 
 
    *Please Note!! If you use parms[11] -- the parameters to be passed to a script -- make sure script_parms[1] is the caster, and script_parms[2] is the target. These 2 parameters will be reversed if the spell is reflected. If you don't want them reversed, use a different array element!

    Also, this won't work with lightening, so you'll have to do that one yourself. 

    Should I do the sound as well?
 
 
    I still need to work on the animation timings.

    updated meteor_swarm, ebolt, magic arrow, poison, flamestrike to use this script
    added spell reflection spell
 

12/07/1998 - POL026
==========    
    Added functions to 'cfgfile' module:
        - GetConfigString() - same as, replaces, GetElemProperty()
        - GetConfigInt()    - returns integer property, or an error
        - GetConfigReal()   - returns real property, or an error
    os::start_script and os::run_script_to_completion now take a 'parameter' parameter.
    os::parameter() added; access to parameter passed. See poisondamage.src
!!! start.src must be recompiled - for good measure, recompile everything.   
    Script functions will start return 'error' objects, which evaluate 'false'
     and have a ".errortext" member.  The three new cfgfile functions are the only
     ones that will do so, so far.
    Updated poisonfield.src, cure.src.  Added poisondamage.src. They're not complete yet,
       but mostly work.
    Changed Wrestling's OBJTYPE in WEAPON.CFG so 'unused' tiles don't halt startup
    CreateItem...(): ObjType limited to 2..0x3fff, Amount to 1..60000
    added inscription
    added firefield, poisonfield, wall of stone, and energy field
    added dispel field

12/06/1998 - POL025
==========
    Added NPC functions:
        - SetOpponent( character );
        - SetWarMode( boolean );
    See CSTGUARD.SRC.  Try asking a castle guard to fight!
      (more stuff is on the way, but just to show what's possible now)
    Added OS function:
        - set_critical( critical ); - sets a script's critical flag
                ( if true, script runs until it blocks )
    NPCs ignore speech of dead PCs.
    sleep() and wait_for_event() return absolutely immediately if 0 passed as timeout.

12/06/1998 - POL024
==========
    ".goto x y z" text command added - transports you anywhere.
    Dynamic Menus added: (see test/dynmenu.src)
        - CreateMenu( title )
        - AddMenuItem( menu, objtype, text );
           - NOTE, the object type of a mobile can't be used in a menu.
             Special values are required; see tracking.cfg
             I may add a function to convert from mobile objtype to menu objtype.
    Internal changes to menu selection to support dynamic menus
    Changed how map height is calculated; .wheretest now tests equal for all current test cases.
    Fixed Mark spell (DC)
    Recall Spell added (DC)

12/05/1998 - POL023
==========    
    Updated a bunch of scripts for the distribution.
    Filled in SPELLS.CFG, and moved some spell scripts from SCRIPTS to SCRIPTS/SPELLS
    Fixed bug in SelectMenuItem so you can use menus more than once again.
    Docs updated for new functions (not the three below though)
    Docs on structures and arrays added
    Added
        - CheckLosAt( character, x, y, z ) can character see (x,y,z)? - see teleport.src
            - Thinking of calling this CheckLosToLocation.
        - CreateItemAtLocation( x,y,z, objtype, amount ) - see test/createat.src
        - MoveCharacterToLocation( character, x, y, z ) - see teleport.src

12/05/1998
==========
    Meteor Swarm spell added. (DC)
    Chain Lightning spell added. (DC)

12/04/1998
==========
    finally got the damned frame relay back up :P
    fixed a bug in alchemy2.src 
    added success_sound and failure_sound to use_stuff
    added detatch() to all applicable scripts
    heal and greater heal added

12/03/1998 - POL022    
==========
    Added:
        - Detach() - allows character to perform other actions.
            - see sspeak.src for an example.
    Internal changes to SelectMenuItem to allow Detach to work.
    Discovered two key (and old!) classes had nonvirtual destructors; Fixed.
      This will kill some tiny leaks, but may expose other bugs.. Just FYI.

    Created a generic use_stuff script for use when item1 used on item2 = item3. This checks the use_stuff.cfg file for information on how
    and what to use items on. You still need to associate the item with teh use_item script in itemdesc.cfg
    (see use_stuff.cfg for details)
    added Eval Int, camping, Mark spell
    added Protection from Poison potion

12/02/1998 - POL021
==========
    Added:
        - TargetCoordinates() returns struct(x,y,z)
        - EnumerateItemsInContainer(container) includes unlocked subcontainers
        - ListItemsNearLocation(x,y,z,range)
        - ApplyRawDamage (deprecates Damage)
        - HealDamage()
    see healdmg.src, listcont.src, listnear.src for examples
    Added "desc" read-only property to Item - the same as from singleclicking.
    Internal changes to single-click text formatting
    Internal changes to target cursor handling to allow targetting equipped items

12/02/1998 - POL020
==========
    Added:
        - ListItemsAtLocation(x,y,z), returns array of items
        - ListMobilesNearLocation(x,y,z,range), returns array of mobiles
            - 10 used for z-range

    Internal changes to Target to support (later) multiple active action scripts.


12/01/1998 - POL019
==========
    Spell fizzle sounds, animation added (only on skill failure)
    POL.LG2 will start recording script errors.
     (I think you can't read this file while the program is running,
      which may make it useless, unfortunately)
    some fixes to script substring comparisons.

12/1/98
==========
    added Poison spell
    Alchemy was working, then I broke it again :P

11/30/98
==========
    alchemy starting to work. Use mortar on reagent, then select a flask. Contents added to flask (use .props) to check. Click on flask and select brazier to condense potion.
    For some reason I never got a success on skill check, so may be a bug.

11/29/1998 - POL018 Minirelease
==========
    Added:
        - PlayObjectCenteredEffect() (for flamestrike)
        - PlayLightningBoltEffect()

11/25/1998 
==========
    Dave's Ebolt added (use mine) (Rac)
    Lightening added (Rac)
    Ebolt, CreateFood, Cure, ArchCure added (DT)
    ItemID and Armslore added -- need some changes (DT)
    Eating added (that was a tough one!) (DT)
    Created a "zapper" item (0x0379f) to test Item ID skill


11/24/1998 - POL017 Minirelease
==========
    Skill use and spell casting scripts can now access the 'cfgfile' module

11/24/1998 - POL016
==========
    ".log [text]" command added - writes a message to the log file
    Items can now have unique scripts which fire on double-click instead of
       their ITEMDESC.CFG script.  These are called a "use script"
       (better name anyone? action script?)
    ".setusescript scriptname" command added - sets a "use script" for an item
    New property added to ITEMs: 'usescript'.  This is read/write.  
      So, you can do stuff like:
        item.usescript := "whatever"; // <-- MUST be a string. others ignored.
      to make enchanted items or whatever.
      See SHOWSTUFF.SRC and SETSHOWSTUFF.SRC for examples.
    Added some more checking to configuration file reading; now, translations
      (like SkillId in weapon.cfg) will flag an error if text is misspelled.
      Also, poorly formed numbers will be flagged in error.

    Added item quality and exceptional items to blacksmithy, carpentry, and tinkering (DT)
    Added the rest of weapons and armor to config files (DT)
    Added Armslore skill, but it's not quite working (DT)

11/23/1998 - POL015
==========
    moved explosion potion into drink_potion, and fixed the sound so Rac wouldn't hit me ;) (DT)
    added batch file to archive all files in pol tree to \pol\pol.zip Mon-Fri at 5:30 PM EST (DT)
    updated tinkering to include complex items(DT)
    Added lockable chest creation with carpentry (DT)
    Added trap creatoin with tinkering (failure has 1 in 10 chance of hurting craftsman)  (DT)

    objects, items, and characters can now have their properties
    queried in scripts with "dot" syntax:
        character.serial
        item.objtype
        and so on.
    properties in a UOBJECT:
        x
        y
        z
        objtype
        color
        serial
        height
        facing
    properties in an ITEM (in addition to those in UOBJECT):
        amount
        layer
        container
    properties in a CHARACTER (in addition to those in UOBJECT):
        name
        warmode
        gender
        truecolor
        hp
        maxhp
        mana
        maxmana
        stamina
        maxstamina
        strength
        dexterity
        intelligence
        dead
        ar
    NOTES:
        (1) these are case-sensitive.
        (2) The compiler won't notice if you misspell them.
        (3) These are read-only.
        (4) The compiler won't notice if you try to assign to them.
        (5) POL won't log if you do (2) or (4)
        (6) (1) won't change.  (2) probably will some day, (3) will for some properties,
            (4) probably will some day, (5) will change.
        (7) I have only tested item.objtype and character.name (see BLADED.SRC)
 
    Also note, these functions, which were added, are now basically obsolete:
    (good thing they were trivial to write :)
        GetPosition() added
        GetStats() added
        GetStatus() added

11/22/1998 - POL014
==========
    ".constat" command added (connection status)

11/22/1998 - POL013
==========
    CheckLineOfSight() added
    SetName() added
    DestroyItem() added

11/22/1998 - POL012
==========
    Added ".destroy" text command to destroy items.
    I'll be uploading a .ZIP file with new releases.  This will contain
    the executable, the CONFIG, SCRIPTS, and DOCS directories, but
    not POL.CFG or the DATA directory.  

11/22/1998 - POL011
==========
    bugfix: script target cursors targetted on characters will no longer AV.
             ( I don't think this actually happened to anyone..)
    compiler change: all function calls require parenthesis, even those that
                     take 0 or 1 parameters (notably: print)
    compiler change: module functions can define default parameter values now,
                     so scripts don't have to pass explicitly.
                     See scripts/spells/magicarrow.src for details
    Scripted spells are in (magic arrow is the first)
        - note for now, you have to call Target on your own.
    GetSkill() added
    PlayMovingEffect() added



11/21/1998 - POL010
==========
    Scripts can now be tied to skills - see anatomy.src, skills.cfg.


11/20/1998 - POL009
==========
    tinkering added (DT)
    setup working.txt in /pol directory to track current projects
    Added .props text command to list all object custom properties (ES)
    GetObjProperty, SetObjProperty added (ES)
    CStr() added (ES)
    Added a bit of range checking to Damage (ES)

11/19/1998 - POL008
==========
    SelectMenuItem returns struct( ObjType, Index ) rather than ObjType
        - temporarily called SelectMenuItem2, to force script updates.
        - I haven't written any scripts that use the Index member.
    RandomInt( N ) added, returns random int less than N.
        - untested as yet.
    GetMenuObjTypes( menuname ) script-callable function added.
       (not real useful yet)
    PlaySoundEffect added.  Currently, effects can only be centered on
       characters.  Sound names and numbers can be found in
       docs/escript/sndlist.txt
    Added carpentry (use saw 0x1035 on logs 0x1bdd) (DT)

11/18/1998 - POL007
==========
    Added .UNLOAD SCRIPTNAME command - so you can try new scripts without
         restarting
    .CREATE (armor or weapon) will now associate the object with its
       armor template or weapon template.
    Added blacksmithy and beginnings of alchemy (DT)

11/17/1998
==========
    smelting of ingots added (DT)
    Added config file access for scripts - see DOCS/ESCRIPT/CFGFILE.HTM

11/09/1998
==========
    .CREATE takes a second parameter, a count.  Creates separate items, not stacked.
    Added scripted fletcher skill - shafts/feathers into arrows.
    Added .BCAST command
    Added .ONLINE command
    Added .ARMOR command - list your armor


11/03/1998
==========
    Armor, shields, parrying added.  
    Error in skill advancement corrected.
    Error in skill display corrected. 

