                           Version 3.40 Changelog

   Note:

     This file documents the progressive development of Crawl 3.40. Much
     of it discusses specific changes to the codebase that may prove
     uninteresting to non-programmers. The devteam has made no great
     effort to clean up our comments.

     Do you seek a more accessible overview of the latest changes? Those
     answering "yes" should read the versions.txt entry for Crawl 3.40
     instead.


=============
Contributors:
=============
Gordon Lipford    (lipford@ca.ibm.com)
Linley Henzell    (linley.henzell@student.adelaide.edu.au)
Jesse Jones       (jesjones@halcyon.com)
Daniel Ligon      (makmorn@qis.net)
David Loewenstern (loewenstern@home.com)
Brian Robinson    (bcr19374@pegasus.cc.ucf.edu)
Brent Ross        (bwross@csclub.uwaterloo.ca)
Josh Fishman      (fishman@cs.nyu.edu)
Don Brodale       (lar@bway.net)


Oct 30, 2000 (Brent Ross)
    -- add macro/function for Control('A') and such.
    -- remove "move[0]"  (struct dist)
    -- remove "&beam[0]" (struct bolt)
    -- fixed some problems with elemental resistances
    -- added "easy_confirm" to rc file
    -- improved vampire's spell selection
    -- added merfolk race
    -- added wanderer class
    -- split out the monster speaking function from monstuff.cc
    -- fewer param monam() => ptr_monam()
    -- restore abilities potion gives no message
    -- move monster spells out of mon-util and into mon-spls
    -- added inv_randart_wpn_properties()
    -- fix berserk for mutations and others (paralyze too strong).
    -- make pandemonium gates rarer, special named demon pandemonium levels too
    -- does exp_needed require the species param -- removed
    -- returned Swords as "Orbs of Fire"
    -- returned quokka (added to low level regular dungeon monsters)
    -- easy_open is now an option
    -- added show_uncursed and easy_butcher options.
    -- slight modifications to divine retribution
    -- make weapon classes depend on different stats (USE_NEW_COMBAT_STATS)
    -- added/move startup messages to the new block after initialise()
    -- option to safeguard accidentally auto-removing and dropping armour
    -- added starting message describing chacter race/class
    -- make yesno() take a flag for "safe" cases... and option
    -- fixed the file locking mechanism
    -- moved some SOLARIS defined stuff (which really isn't Solaris dependant) 
       to MULTIUSER.
    -- write player_title() as interface to skill_title() which will do the
       best calculating and call skill_title (which is still needed for ghosts)
    -- fixed bug: runes were being generated in the hive
    -- fixed bug: examined clouds wrongly identified
    -- added Simulacrum spell (creating a new Ice spell... I'm surprised
       that Ice/Necromancy aren't very closely related... this will help
       fix that).
    -- added Ball Lightning spell (replacing Electric Orb).
    -- fixed best_skill to use skill_points and species difficulty, instead
       of just the base level (which gave preference based on the order of
       the skills... this will only have that happen if the skill points 
       are also equal, which is much less likely).
    -- adjustments to the spellbooks, and spellbook aquirement
    -- Warp adjustments 
        - removed bend, warp/distortion brand from play

        - warp brand was raised in level and the miscast effects were
          added to the spell start and end (to limit the spell should it
          ever be brought back).

        - translocations also doesn't help with the miscast effects of 
          distortion brands (it was reducing the terror wielding one, and 
          these weapons easily outclass other brands for bonus damage and 
          powerful effects... they should never be anywhere near usable 
          as a reliable swap weapon, player's should have to seriously think 
          before deciding to use one... and have to risk some real damage
          or banishment if they use them frequently).

        - reduced frequency of summoning "spatial vortices" as a miscast
          effect -- people were reliably getting them by dropping warp
          branded weapons (and it's random movement makes it much less 
          a threat to the player, who will sit back and watch it mow down
          the other monsters in the room (who won't see it as a threat))

        - added Far Stike as a level one spell (the other spells were very
          overpowered (distortion weapons are gross and dangerous, using
          that code as "balanced" is wrong unless you're bringing over the
          danger as well... all three of warp attacks were also range 1, which 
          is silly for Warpers, who should be world-class plinkers, not close
          combat munchkins).  It's a much limited spell that allows the player 
          to "hit" a monster in LOS (yes, that means like striking/airstrike 
          so it's not really another magic missle) with their weapon 
          (limits being: no magical special effects, no enchantment bonus,
          slow to cast (weapon swing is part of it, but it's also a spell
          so it will never take less than 10), max damage limited by 
          translocation skill and weapon, with strength bonus/penalty 
          applied, can be resisted (maybe change this to evaded?)).  This 
          should probably be the only translocation combat spell... let them 
          go elsewhere for strong offensive.

        - made it so that blink will at least teleport the player to a square
          two squares away (makes blink a bit more usable, because it removes
          the annoying "I could have walked here" feelings).

        - added Swap, which allows the player to swap places with an
          adjacent monster.  Isn't really that abusable as it uses the
          same swap code that's used for friendly monsters and that
          doesn't currently have insta-kill potential... that can be
          fixed later, but right now I'm calling it a "feature".  Should
          it be fixed, this spell could be changes to give a higher resist
          and in insta-kill situations the monster could be allowed to
          "scatter" to any of the immediate surrounding squares as a 
          save against death (player could get this too).
        
        - added Apportation, a simple utility spell that will move light
          objects to the player
        
        - added Evocation a high level teleport surrounding monsters 
          away spell (even if resisted the monster still might be blinked)

    -- fixed BUG: nagas gaining breathe fire mutation (twice in this case) seem
                  to lose the spit poison ability

    -- made it so that MULTIUSER will look for ~/.crawlrc (Un*x-type standard)
    -- pain, disrupt, far strike do a minimum of 1pt of damage to make up 
       for the monsters saving throw (that 1pt is only really good early
       on when the character can use it to help stay alive, later on it 
       means almost nothing... so it helps out begining characters, and
       makes the fact that the spell is going to be resisted fairly often
       at those levels a little less painful).
    -- made sure stabbing had a point of starting damage (it's silly to apply
       multipliers to zero or negative damage).
    -- returned "Toxins" to "Envenomations"
    -- spider form now makes spell casting slightly more difficult.
    -- changes "book of Assassinations" to "book of Stalking" (less confusing)
    -- fix for "buggy helmets"... normal helmets with item_dam == 0 were not
       being handled in the code (before they defaulted to nothing)... might
       still exist, but should be rarer (there is a chance that the high
       values of item_dam also occur).
    -- fix for "buggy potions"... potions ids were being generated in a wider
       range than there was descriptive words.
    -- lowered the magic resistance of the really low level monster to allow 
       first level characters to deal with them better.
    -- enums for item_descriptions
    -- enums for monster bands
    -- added enums for monster spell templates (still need to be applied)
    -- fixed enchant_monster() so that slow and haste will work through it.
    -- changed player_fast_run() into player_movement_speed() and got rid
       of ATTR_WALK_SLOWLY as well... player_movement_speed() returns the
       movement rate so it's no longer "have running == 6".
    -- modified swap_monsters to handle habitats.
    -- tweaked failure rate for Trog Haste (which was in with the other haste
       and using Invocations).
    -- power level caps for spells (checks for most spells to verify that 
       the effect is limited in some way as protection against potential 
       extremely high power casting).  Adjustments to spell damages/to-hit
       to work with the lower caps (that the play will run up against).
    -- added wizard command for filling up skill experience pool

 29.july.2000 (Jesse Jones)

    * Changed NUM_SPELL_TYPES to 14 (from 32767!).
    * Misc very minor CodeWarrior tweaks.
    * Moved the source files into a new "Source" directory.
    * Switched to using bounds checked array classes for most arrays.
    * Fixed several places that were indexing past the end of arrays.
    * Renamed environ::sh_x, sh_y, sh_greed, sh_type, and sh_level so they start with shop.
    * Renamed MNG NON_MONSTER, MNST MAX_MONSTERS, ITEMS MAX_ITEMS, ING NON_ITEM, 
      CLOUDS MAX_CLOUDS, CNG EMPTY_CLOUD, and NTRAPS MAX_TRAPS. 
    * Fixed end_game so that it works with filenames longer than 6 characters.
    * Disabled USE_WARPER_BETTER_WEAPON.
    * Fixed misspelled "jewelry".
    * Removed SPELL_SWARM from the Book of Summonings.
    * Added Josh's "pick appropriate conjuration spellbook" code.
    * Added Gordon's Manticore fix.
    * Added the lnchType fix to the monster throw code.
    * Added Gordon's revised title changes.

28.july.2000 (Gordon Lipford)

    all changes are GPL'd by Gordon Lipford (c) 2000
    in the event that the original Crawl license is found to be non-GPL,
    special permission to use the changes with Crawl is hereby granted.

    Bug Fixes:
    * Manticores will now use their spikes.  They weren't being given any
      inventory in place_monster(),  and then the throwing routine checked
      for inventory before letting them throw..
    * Player::level_change(): fixed up hit point penalty for halfings and
      gnomes (incomplete coding of HP adjustment).  Rewrote hp and mp gained
      due to level so that it couldn't happen again.
    * item_use::wield_weapon(): smoothed out Translocator 'save' vs distortion
      effects when wielding/unwielding.
    * smoothed out hp bonus for fighting skill (in integer math,  always 
      divide _last_).
    * enchant weapon scrolls will affect missiles now (no branding though),
      if they aren't already heavily enchanted - same as weapons.
    
    Changes:
    * Completely reworked throwing for players _and_ monsters.  Monsters are
      not nearly as good as players for the most part,  but can still be
      rather scary.   Hit Dice are (approximately) substituted for player skill,
      and monsters of high intelligence are much better shots now.
    - targeting any missile weapon benefits from high dex and throwing skill.
      In fact, effective bow/xbow/sling skill is limited to twice one's 
      throwing.  A warning is given on the skills screen if this limit is 
      hampering the player.
    - darts, slings, and crossbows are easy to use.  Bows and thrown weapons
      are harder,  but bows improve a _lot_ with skill.
    - thrown weapons generally suck,  but not horribly badly - they're still
      useful in a pinch if you have decent strength and throwing skill.
    - Strength has a different effect on the damage done from missiles:
      - Slings and bows benefit from strength,  up to a point determined by
        the launcher's magical damage bonus.  The launcher damage bonus is
        _not_ added into the damage calculation.
      - Thrown weapons benefit directly from strength,  albeit at a lower rate.
      - Crossbows do not benefit from strength at all.
      - Crossbows benefit directly from magical launcher damage bonuses.

    * changed some of the class titles
    * updated display_mutations() so that more than 20 mutations will
      cause a -more- prompt and screen clear. 

28.july.2000 (Michal Valvoda)

    Changes in mutations::void display_mutations(void)
    - added innate abilities and weirdness to "Mutations & Other weirdness" 
      screen and renamed it to "Innate abilities, weirdness & mutations".
    Innate abilities are colored LIGHTBLUE


22.july.2000 (Josh Fishman)

    all changes are GPL'd by Josh Fishman (c) 2000
    in the event that the original Crawl license is found to be non-GPL,
    special permission to use the changes with Crawl is hereby granted.

    * AppHdr.h:
    added #defines:

    USE_SKILL_POOL_DRAIN
    - comment out to remove LRH's old skill-pool drain code, which makes the
      xp-pool drain faster when it is very full

    USE_WARPER_BETTER_WEAPON
    USE_WARPER_SPELL_BEND
    - start warpers with a {dagger/quarterstaff} of Distortion, or with the
      spell Bend, depending on which is commented out. the former is
      particularly evil for ogre-mages, since their default weapon can't dissect.

    * abl-show.cc:
    - Changed some `you breathe foo's to `you exhale foo's.

    Made transformation, species & mutation breath weapons mutually exclusive
    (so a naga with the `breathe flame' mutation can't spit poison). THIS IS
    NOT TOTALLY DONE, but somewhat better than before.
    
    + Added failure probabilities for some (not yet used) Invocations.

    * beam.cc:

    + Added BEAM_LAVA for player spell Bolt of Magma
    + N.B.: in some places hellfire and lava were conflated; I tried to
      separate them, but may have introduced bugs.


    * describe.cc:

    + Many changes to monster descriptions.
    + Chunk-of-flesh description now depends on your race, but not enough.
      For example, carnivores ought to like non-rotten meat.
    + Spell descriptions:
    - added Bolt of Magma
    - changed Freeze, Sleep and Mass Sleep to reflect new `Slow Snakes' code
    - Shadow Creatures has old description, to reflect its school
    - Summon Large Mammal -> Call Canine Familiar
    + Some changes to god descriptions


    * dungeon.cc:

    + Fixed "Entering..." bug (line 7215 or so)


    * it_use2.cc:
    
    + Added ZAP_MAGMA (for Bolt of Magma)
    + Fixed POT_MIGHT effect


    * it_use3.cc:

    + Fixed staff_spell() (wasn't letting player pick first spell sometimes).
    + STAFF_SMITING no longer gives you a one-choice menu, it just does it.
    + Non-Spell Staves no longer say "This staff has no spells in it." when
      (I)nvoked, they say "Nothing appears to happen.".
    + Less abusive message for putting on non-jewellery (with free spelling 
      error!)
    + Jewellery messages now feature "put on" in some places where "wear" was.

    * mon-data.h:

    + Added flags M_COLD_BLOOD and M_WARM_BLOOD where IMO appropriate.


    * mon-pick.cc:

    + Removed MONS_RAKSHASA_FAKE from generateable monster lists.
    + Added Wargs, Wolves and Bears to generateable monster lists.
    - Wargs in Orc Mines
    - Wolves & Bears in the Lair
    + Moved mon_entry[] from within function to outside; made init code
      into its own function.


    * monstuff.cc:

    + Monster wounds messages: mon HPs left: was 1/4-1/3 => "horribly", now 1/6-1/3
    + (Glowing) Shapeshifters are no longer allowed to use Mage and Priest
      special powers, but still get their shape's physical abilities. So a
      shapeshifter in the form of an orc priest can't smite you, but one in
      dragon form could breathe fire.
    + Some spelling & grammar fixes to mon_speaks; MUCH MORE WORK NEEDED HERE!


    * newgame.cc:

    + Implemented USE_WARPER_BETTER_WEAPON and USE_WARPER_SPELL_BEND

    + Stalkers:
    - skills: no more THROWING or DARTS, now SPELLCASTING and ENCHANTMENTS
    - book: Book of Assassination
    + Draconians:
    - No longer allowed to be Enchanters -- they so suck at Enchantments
    - ... but now allowed to be Transmuters, since they're good at Transmigrations
    + Kobolds now allowed to be Death Knights.
    + Halflings now allowed to be Crusaders.
    + Removed strange random 1st level spell code -- now always give players the
      1st spell in their spell-books.


    * player.cc:

    + Players transformed into Dragons and Air now protected from poison
      (as monsters of those types are immune).
    + Players transformed into Air no longer get air-magic boost, but still do
      get earth-magic penalty.
    + Centaurs and Spriggans don't lose their fast-running w/ BLADE_HANDS any more.


    * religion.cc:

    + simple_god_message() simplified
    + Reduced number of colors in god_speaks().
    + Changed some gain/lose piety messages to reflect what power was gained/lost.
    + Changed penence messages to reflect that gods don't summon, they send.


    * skills.cc:

    + Sludge Elves now bad at Enchantments, good at Transmigrations, worse
      at all forms of Elemental Magic (was experimental, not sure if it
      was discussed on crawl-dev). FIXME: change back?


    * spell.cc:

    + Added SPELL_BOLT_OF_MAGMA.
    + Spell type code now uses bitfields.


    * spells.cc:

    + Spell type code now uses bitfields.


    * spells2.cc:

    + Weapon branding code now works (brand_weapon()).
    - er, except for what may be a bug at the end: `power << 1' => `power * 2'
    + Ozocubu's Refrigeration and Freeze can now slow cold-blooded creatures.
    + summon_things now correctly pluralizes.


    * spells4.cc:

    + Added case TRAN_AIR to your_hand().
    + apply_area_one_neighboring_square() no longer gives unlimited trys.
    + cast_summon_large_mammal() no longer generates hogs or sheep, now just
      Jackals, Hounds and War Dogs.
    + cast_sticks_to_snakes() gives MONS_SNAKE for low-level large object snakes
      (as opposed to MONS_BROWN_SNAKEs).
    + sleep_monsters() is now only called from hibernation-spells:
    - Now cold resistance negates.
    - `Slow Snakes' (cold blood => may be slowed as well as put to sleep)
    + Fragmentation & Shatter:
    - Statues and magic traps no longer destroyed
    + Shuggoth Seeds: seed now requires MH_NORMAL, warm-blooded host


    * spl-book.cc:

    + Books of Minor Magic changed, hopefully for the better!
    - BoMM-II man still need some help; Ozocubu's Armour replacement?
    + Book of Flames loses BOLT_OF_FIRE, gains BOLT_OF_MAGMA
    + Book of Frost gains SLEEP, loses FREEZING_CLOUD
    + Book of Ice gets MASS_SLEEP and FREEZING_CLOUD
    + Changes to Enchantment books
    + New Book of Assassination
    + spellbook_template() copying loop used to count from 1 to SPELLBOOK_SIZE,
      I made it count from 0 (to fix the "can't-get-to-first-spell-in-staff" bug).


    * spl-data.h:

    + Spell structure now has one field for "level" (instead of 3 identical ones).
    + Spell schools are now encoded as bits in an unsigned int instead of in a
      special structure.
    + Some spells moved back to their old schools (from my (bad) recent changes).


    * spl-util.h & spl-util.cc:

    + Changes to use new, simple spell structure.


    * view.cc:

    + Removed "if (do_updates) mpr("Stealth checks...");" from DEBUG builds
      (it's too annoying).
    + Enum'd monster noises.


21.jun.2000 (Michal Valvoda)
     Changes:
        monstuff.cc
           - completely reworked mons_speak routine
           - removed silence check required to call mons_speak (line 749)
           - lowered chance to speak to one_chance_in (7) (line 749)
        describe.cc
           - added many new monster descriptions (deep elves, unique monsters
              like Sigmund, Terence etc., killer bee larva ...)
           - changed some existing descriptions - made them more detailed
           - in case of some "smell" message add MUMMY check


19.jun.2000 (Gordon Lipford)
     Changes:
     
     * replaced old losight() function with new one.  It doesn't quite
       match the old one,  but it's close enough.
     * externalized setLOSRadius() and added normal_vision and current_vision
       fields to the player structure.  We have variable light sources, voila!
       
     - Note that using a radius of 0 screws up map memory and looks really dumb.
       I am not going to try to fix this.
     - In a similar vein,  bumping into something should draw it on the map
       if you didn't know it was there already (ie you fumble blindly into a
       wall).  I'm not going to do this either.  :)
       
     * changed all level 1 'handle' references to level 2 'FILE *' for better
       portability.  Whenever a function needs a File Descriptor,  I have
       substituted fileno(handle) for just 'handle'.
     * added Windows 32 bit Console support.  Screen redraws,  loading, saving,
       and highscore updates are now VERY fast on Windows machines,  even playing
       from a shared network drive.  The NT DOS VDM,  at least,  was !@$#* crap.
       

17.mar.2000 [Josh Fishman]

     Bug Fixes:

     * ability.cc: ABIL_BREATHE_FIRE gained power if player had MUT_SPIT_POISON
       -- changed to bonus if player has MUT_BREATHE_FIRE
     * beam.cc: poison_monster: fixed so TSO only gets pissed if it's YOUR
       poison (my broken code had him angry if ANY poisoning occured)
     * spells.cc: changed many miscast messages to passive "You are caught in"
       (rather than "You conjure up") because miscast_effect is called for all
       sorts of stuff (particularly divine punishments).


     Structural Changes:

     * moved much spellbook code to new file, spellbook.cc
     * removed a host of DUR_<BRAND_TYPE> entries; replaced with
       DUR_WEAPON_BRAND
     * cast_selective_amnesia(bool): was (void); bool used to determine if
       failure (and memory loss) is allowed. Sif Muna's invocation guarentees
       success.

     New Functions:

     * Confined to spells4.cc


17.03.2000 [Don Brodale]

     BugFixes:

     * damage taken by player (misc.cc) for CLOUD_MIASMA was wrong --
       operator precedence at fault;
     * SPWPN_FROST changed to RING_SUSTAIN_ABILITIES in
       player::player_sust_abil() for EQ_LEFT_RING conditional (noted by
       Jukka);
     * misc::itrap() MI_AXE -> WPN_HAND_AXE and mstuff2::mons_trap()
       MI_SPEAR -> WPN_SPEAR, MI_AXE -> WPN_HAND_AXE to fix inappropriate
       item generation (noted by Brent);
     * newgame::new_game() stairs to Hall of Blades now
       "you.branch_stairs[STAIRS_VAULT] + 4" not
       "you.branch_stairs[STAIRS_CRYPT] + 4" to fix overmap inconsistency
       described by Jukko and confirmed by Linley;
     * dungeon::items() recoded to fix generation of skill manuals of
       SK_GREAT_SWORDS but not of SK_POISON_MAGIC and SK_INVOCATIONS
       (noted by Brent);
     * MS_STING was cased in mstuff2 to be BEAM_FIRE causing it to set
       scrolls afire (noted by <kathomps@julian.uwo.ca>) -- changed to
       BEAM_POISON, as it should have been all along;
     * CMD_LIST_WEAPONS in acr::input() '(' -> ')' (noted by Brent);
     * CMD_LIST_WEAPONS in liblinux::init_key_to_command() '(' -> ')' to
       match above change; and
     * half a bugfix: in food::eat_meat() Amulet of the Gourmand no
       longer renders contaminated or poisonous flesh clean -- now have
       to apply the other half enabling eating of rotten food as though
       it were [presumably] underlying corpse effect type.

     Structural Alterations:

     * commented many many of the header files -- need to comment and
       check rest, but can we keep these up to date, please?;
     * cleared out all tabs (some 500+ of them);
     * *massive* checking of function declarations in most of the source
       files and resulting clean-up of #includes and *.cc versus *.h
       declaration -- too many to list here, if anyone wants to see it,
       let me know;
     * #ifdef/#defn protection added to overmap.h, preventing multiple
       inclusions;
     * version.h -- BUILD_DATE advanced to "17 mar 2000" and VERSION
       changed to "3.40pr30";
     * standardized ordering of #includes atop files, alphabetized last
       set of #includes within each file, removed of duplicate entries
       where found;
     * duplicate #includes for message.h removed from files already
       #include-ing externs.h (which in turn #includes message.h);
     * removed setting you.redraw_hunger to 1 immediately prior or after
       calls to food::food_change(), as the function sets this value
       itself; and
     * replaced (here and there) the sum of "n calls to random2(a)" with
       "random2avg( (n*(a-1))+1, n )" -- for low values of n,
       distribution of returned value is analogous and this approach
       offers option to tweak distribution of value returned, too.

     New Functions:

     * food::can_ingest() added and inserted where appropriate -- option
       to suppress message included in case we want to tie routine to
       inventory list command to display whether something is edible by
       player.

     Changes to Existing Functions:

     * message added for change in burden state *to* unencumbered --
       don't know why there wasn't one in the first place, but actual
       message may require tweaking
     * acr.cc variable newc changed from type int to char to match value
       returned from newgame::new_game()
     * monplace::create_monster() automatic variable "int pets" removed
       -- didn't do anything except sit there and retain zero valuation
     * effects::lose_stat() recoded to use STAT_RANDOM (see below)
     * food::food_change() coding simplified as it was really far more
       complex than it had to be and confused, to boot
     * food::is_carnivore() removed -- replaced by food::can_ingest()
       (see above)
     * food::eat_from_floor() automatic variable "int gloggj" removed,
       all it held was returned value of eating(), but was never used
     * mutation.cc redundant codings replaced with calls to
       player::increase_stats() -- look for the comments: nulled-out
       gain/loss message strings for mutations affected by change
     * spells0::undead_can_memorize() -> undead_cannot_memorize() and
       recoded for more reasonable usage, to permit restriction of
       certain spells solely to the dead, and to allow the 'true' undead
       to use spells that the 'hungry' dead cannot (not possible before),
       etc.
     * view::losight() variables see, see_section, and behind are now
       bool and not (int / short int / char) -- some clean-up called for
       but I wasn't up for it
     * barehand_butcher added to food::butchery() to clarify coding
     * spells1::cast_fire_storm() variable summd its association with
       monster_place() removed
     * player::how_hungered() recoded so as to avoid need for goto:
       statement -- the accursed goto
     * standardized (to some extent) the way in which mons_lev.cc f(x)'s
       are coded
     * mutation::perma_mutate() rewritten for clarity, taking advantage
       of left-right evaluation of && conjoined conditionals
     * effects::recharge_wand() clean-up / clarified
     * spells1::cast_revivification() clarified a little bit
     * monstuff:mons_in_cloud() cleaned-up, optimized, and enumerated --
       no longer relies on (env.cloud_type[cl] % 100)
     * view::cloud_grid() cleaned-up
     * ouch::lose_level() lost some code that simply called random2() to
       no particular end
     * mons_lev::mons_level_abyss() -> mons_lev::mons_abyss(), to be more
       in line with mons_pan() as both simply check whether a monster
       "belongs"
     * functions that now return bool instead of char:
          + effects::forget_spell();
          + effects::lose_stat();
          + effects::recharge_wand();
          + fight::monsters_fight();
          + food::butchery();
          + food::eat_from_floor();
          + misc::scramble();
          + mons_lev::mons_level_abyss();
          + monstuff::curse_an_item();
          + monstuff::mons_speaks();
          + mstruct::mons_pan();
          + mutation::delete_mutation();
          + mutation::give_bad_mutation();
          + mutation::give_good_mutation();
          + mutation::mutation();
          + mutation::perma_mutate();
          + player::you_resist_magic();
          + transfor::can_equip();
          + transfor::transform(); and
          + monplace::empty_surrounds().
     * functions that now return bool instead of int:
          + transfor::remove_equipment();
          + monstuff::wounded_damaged() -- this may have to change if we
            add more types of monster hurt than wounded and damaged;
          + dungeon::treasure_area(); and
          + view::check_awaken().
     * functions that now return unsigned char instead of int:
          + player::player_energy();
          + player::player_fast_run();
          + player::player_spec_air();
          + player::player_spec_cold();
          + player::player_spec_conj();
          + player::player_spec_death();
          + player::player_spec_earth();
          + player::player_spec_ench();
          + player::player_spec_fire();
          + player::player_spec_holy();
          + player::player_spec_poison();
          + player::player_spec_summ(); and
          + player::player_sust_abil().
     * spells2::burn_freeze() now returns char instead of int;
     * dungeon::place_monster() parameter "char allow_bands" changed to
       "bool allow_bands" to clarify how this parameter is, in fact,
       used;
     * dungeon::place_monster() parameter "int type_place"
       changed/renamed to "bool is_summoning" to clarify how this
       parameter is, in fact, used;
     * dungeon::spotty_level() takes bool instead of char for first and
       third parameters (seeded and boxy);
     * food::eating() returns void instead of int -- always returned 0
       and the returned value never used elsewhere;
     * food::ghoul_eat_flesh() takes bool instead of char for only
       parameter;
     * item_use::wield_weapon() takes bool instead of char for only
       parameter;
     * misc::dart_trap() takes bool instead of int for first parameter;
     * misc::down_stairs() takes bool instead of char for first
       parameter;
     * misc::fall_into_a_pool() takes bool instead of char for first
       parameter;
     * misc::handle_traps() takes bool instead of char for third
       parameter;
     * monplace::empty_surrounds() takes bool instead of char for fourth
       parameter;
     * monplace::mons_place() parameter "int type_place" changed/renamed
       to "bool is_summoning" to clarify how this parameter is, in fact,
       used;
     * mstuff2::monster_abjuration() takes bool instead of char for
       second parameter;
     * mstuff2:monster_teleport() takes bool instead of char for second
       parameter;
     * player::increase_stats() takes unsigned char instead of char for
       only parameter, extended to handle random stat boost;
     * spells1::ice_armour() takes bool instead of char for second
       parameter; and
     * spells3::dancing_weapon() takes bool instead of char for second
       parameter.

     Enumerations and Defines:

     * MONS_MOLLUSC_LORD (255) added to enum MONSTERS -- deprecated but
       still referenced;
     * NUM_WANDS added;
     * STAT_RANDOM and NUM_STATS added;
     * NUM_DURATIONS added and kept at 30 (rather than true value)
       because setting it lower (I think) would cause savefile
       compatibility problems -- not fully useful unless we wish to break
       savefile compatibility;
     * MI_AXE (9) and MI_SPEAR (11) removed from enum MISSILES (see
       above);
     * enum MAP_SECTIONS added for dungeon.cc / maps.cc interaction --
       not fond of how maps are applied, so this may be temporary;
     * enum MONSTER_CATEGORIES and mstruct::monster_category() added to
       clarify certain conditional tests and keep comparison on
       MONS_foobar to equality or inequality for ranges -- this will be
       expanded and attached to similar entries in m_list.h (I ran outta
       time!);
     * enum CORPSE_EFFECTS added -- members mimic C_foo #defines and add
       a few new ones and another for rotting [see food::eat_meat()] --
       again, I ran outta time to extend application;
     * misc::in_a_cloud() fully enumerated out, no longer relies on
       switch (env.cloud_type[cl] % 100); and
     * much more general enumeration across codebase.


06.03.2000 [Brent Ross]

     * removed strength loss from berserk penalty (acr.cc);
     * added Trog code to berserk (fight.cc, acr.cc);
     * reverted Berserkers and Paladins to their original weapons/skills
       -- actually, Paladins changed to sabres on Linley's suggestion
       (newgame.cc);
     * removed learning from stave combat (fight.cc);
     * made vorpal weapons less common, other egos more common?
       (dungeon.cc);
     * changes to makefile.sol;
     * increased armour penalty for spellcasting, lowered the reduction
       to penalty for armour skill (spells0.cc);
     * armour changes: elven armour is better for spellcasting, dwarven
       armour for AC from skill -- for everyone (player.cc, spells0.cc);
     * paralysis leaves player easier to hit (player.cc);
     * reduced Xom's prayer reponse rate (religion.cc);
     * added penance and gift timeouts for gods (files.cc, extern.h,
       religion.cc, newgame.cc, ability.cc):
          + divine_retribution() (religion.cc, decks.cc, spells.cc); and
          + added god_speaks() so that the other gods can use colourful
            text.
     * indented code;
     * improved the demonspawn AC mutations by boosting the number of
       levels for the lower ones;
     * extended spellbooks to 8 spells maximum ... restored levitation to
       Air, removed "Summon Elemental" from Ice (their "elemental" is
       really an Ice Beast, not benefitting from summoning Water
       Elementals); and
     * added Confusing Touch as a first level spell for enchanters and
       Sure Blade as a second level spell -- removed wand and gave them
       some enchanted darts.


23.02.2000 [Don Brodale]

     BugFixes:

     * implemented Linley-suggested bugfix in misc.cc:down_stairs() to
       fix "Abyss bug" that was actually a/the "Pandemonium bug";
     * copied over new makefile.sol posted by bwross;
     * typo in dungeon.cc limited weapon given to elven mage-types to
       whips and sabres *only*;
     * item descriptions added to itemname.cc for BOOK_PARTY_TRICKS and
       BOOK_CANTRIPS (jmf/bcr forgot to do so?);
     * spells2::summon_elemental() would create sleeping elementals when
       summoned hostile to spellcaster; and
     * spells2::summon_things() -- apparent reversal of
       MONS_ABOMINATION_SMALL and MONS_ABOMINATION_LARGE [jdf flagged it
       first] fixed by correcting improper enumeration (see below).

     Gameplay Changes:

     * stalkers, assassins, and venom mages begin the game with knowlege
       of Poison Potions (c.f., Paladins/Healers possessing knowledge of
       Healing Potions).

     Structural Alterations:

     * externs.h now #includes enum.h -- already de facto standard, now
       openly the case;
     * moved files not directly related to current build into subfolder
       labeled "misc";
     * moved files removed from or "left behind" by the current build
       into subfolder labeled "unused";
     * proper #includes for decks.cc now in place;
     * redundant #include defines.h in invent.cc and mstruct.cc removed,
       already #include'd by externs.h;
     * changed some formulas resembling "menv[bk].type =
       MONS_ABOMINATION_SMALL + (random2(2)) * 26;" to conditional on
       coinflip(); and
     * flipped many conditional clause orderings to place function calls
       last to take advantage of short-circuit logic.

     New Functions:

     * stuff::coin_flip() to replace random2() when desired result is
       simply true or false -- does not use rand() or random() for return
       value, getting around "iffy" rand() implementations for low order
       bits (from *Numerical Recipies in C*);
     * stuff::one_chance_in() to clarify conditionals like ".. &&
       random2(foo) == 0 .." -- !one_chance_in() more intuitive than
       !random2(), too;
     * stuff::stepdown_value() to replace [and generalize] repeated
       conditional chains in spells2.cc;
     * stuff::table_lookup() to randomly return a value from an unbounded
       value list and associated probabilities; and
     * food::is_carnivore() to handle set conditional evaluation in
       food.cc and itemuse.cc.

     Changes to Existing Functions:

     * item_name::initial() -> item_name::clear_ids() to clarify what
       task this function performs;
     * extended random22() to accept any number of 'dice' for averaging,
       renamed to random2avg();
     * extended random40() to accept any limit, renamed random2limit();
     * "fixed" item_use::drink_fountain();
     * "fixed" spells2::cast_twisted() a bit -- needs more fixing still;
     * nested [in place of stacked] strings of conditional statements in
       player::you_resist_magic(), beam::check_monster_magres(),
       skills2::clac_ep() to eliminate needless value checking;
     * changed create_monster() call in spells2::summon_butter() to
       duration 22 [from 21] to match other summoning spells;
     * altered staff description routine in describe.cc to prepend "This
       staff";
     * dungeon::box_room() optimized for efficiency -- lopsided odds for
       placement of one (and only one) additional door reflects original
       algorithm [I cannot explain why it should be this way];
     * dungeon::city_level() clarified and optimized;
     * dungeon::place_shops() optimized a bit;
     * dungeon::plan_4() optimized a bit -- removed variable boxy_type,
       as it was useless;
     * dungeon::prepare_swamp() optimized slightly;
     * dungeon::generate_abyss() logic clarified;
     * it_use2::zappy() -- changed func_pass[5] for ZAP_ICE_STORM to
       BEAM_ICE (23) from BEAM_COLD (3) in accordance with comment and
       spell description;
     * shopping::shop_getch() removed entirely and replaced by
       stuff:get_ch() -- differed only in that the former returned char
       and the latter unsigned char [variable ft in shopping::in_a_shop()
       changed to unsigned char as a result];
     * spell::surge_power() -- replaced successive tests with one complex
       conditional to reduce number of tests required;
     * spells2::summon_swarm() cleaned-up to make creature selection
       clearer; added giant mosquito; red wasp -> wolf spider
       [reversion]; killer bee larvae -> scorpion [as commented];
     * spells2::summon_undead() cleaned-up by replacing successive
       conditional calls to rand2() with one switch call to rand2() per
       loop-through -- if odds look funny, it represents evaluation of
       original coding;
     * removed double assignment of numsc from spells2.cc:summon_swarm()
       and spells2.cc:summon_undead();
     * newgame::class_allowed() cases now uniformly list >disallowed<
       species for all classes [except hunter];
     * newgame.cc:init_player() -- eliminated redundant you.level_type
       initialization, general clean-up;
     * recoded describe::describe_potion() and describe::describe_food()
       to handle redundant wordings -- more cases involved, but fewer
       textual chunks duplicated;
     * functions that now return bool instead of int:
       dungeon::place_specific_trap(), fight::jelly_divide(),
       spells::which_spellbook(), and spells0::spell_type();
     * functions that now return bool instead of char:
       item_use::drink_fountain(), monstuff::random_near_space(),
       player::wearing_amulet(), spells::learn_a_spell(),
       misc::go_berserk(), spells2::brand_weapon(), and stuff::see_grd();
     * invent::invent() is now takes bool instead of char for second
       parameter;
     * overmap::print_level_name() now returns bool and takes bool as
       third parameter, which also means that already_printed is now type
       bool, too;
     * player::player_see_invis() now returns unsigned char instead of
       int; and
     * spells3::you_teleport2() now takes bool instead of char.

     Changes to Variables:

     * nulled out Great Swords array entries in skills2.cc -- no longer
       used;
     * uncommented the last four entries to the skills[][] array and
       deleted the fourth -- entries now match size of array as declared
       elsewhere;
     * converted some integer constants (foo = 59) to single-quoted
       characters (foo = ';') where appropriate; and
     * int item_sacr in religion::altar_prayer() deleted, as it was
       unused;

     Changes to In-Game Messages and Textual Elements:

     * VERSION set to "3.40pr" so people know this is not the final
       release;
     * BUILD_DATE set to "23 Feb 2000" -- I think we should use month
       abbreviation to avoid numerical confusion;
     * minor tweaking of messages relating to undead players;
     * special statue transformation message for gnomes added;
     * grammatical clean-up and rewording of all spell descriptions in
       describe.cc -- all checked, some changed a little;
     * "book of Useful Magic" -> "book of Practical Magic";
     * "book of Poisonings" -> "Young Poisoner's Handbook" (movie
       reference);
     * "book of Envenomations" -> "book of Toxins";
     * "book of Storms and Fire" -> "book of the Tempests";
     * "Anita" ->"Snorg" within its m_list.h entry;
     * "Sneaker" -> "Sneak" for stealthy types (did one become an old
       tennis shoe?);
     * "Assassin" -> "Blackguard" for stabbing to avoid confusion with
       character class;
     * "Thief" -> "Covert" for stealthy types to avoid confusion with
       character class;
     * "Axe Maniac" -> "Halberdier" for polearms -- category includes
       more than axes, so this is a better fit and avoids repetition of
       another "top level" skill name;
     * "Bombardier" -> "Flinger" for slings, as it is more descriptive of
       a slinger's actions;
     * "Crazy Person" -> "Whirler" and "Really Crazy Person" -> "Crazy
       Person" for slings -- the joke still remains, but some dignity is
       restored to slingers everywhere; and
     * "Igniter" -> "Firebug" and "Burner" -> "Arsonist" for Fire Magic.

     Enumerations and Defines:

     * COLORS #define applied to numerical values still present in
       m_list.h;
     * COLOR #defines applied to it_use2::zappy() for ZAPs not switched
       over from value numbers;
     * COLOR #defines applied to remaining codebase, where I could find
       references still using numerical values -- I think I overdid it a
       bit and need to go back and fix a particular set of replacements;
     * #define NO_MUT (in mutations.cc) replaced by last member in
       MUTATIONS: NUM_MUTATIONS;
     * #define NO_EQUIP replaced by last member in EQUIPMENT enum:
       NUM_EQUIP;
     * removed #defines (and references to them) for Tome of Destruction
       and Manuals in dungeon.cc -- superceded by BOOKS;
     * replaced 501 with ING where appropriate -- only scattered
       instances of bare 501's left in the source code;
     * MLAVAfoo and MWATERbar #defines restricted to use only in certain
       header files [m_list.h monsstat.h newmonst.h], with the exception
       of MLAVA4 used in monstuff.cc (what is it?) -- I'll clean these up
       later, but other than this, they are no longer used in the
       remainder of the codebase;
     * CLOUD_ENERGY -> CLOUD_PURP_SMOKE;
     * CLOUD_STICKY_FLAME -> CLOUD_BLACK_SMOKE;
     * MONS_SMALL_ABOMINATION -> MONS_ABOMINATION_LARGE and
       MONS_LARGE_ABOMINATION -> MONS_ABOMINATION_SMALL -- mistakenly
       reversed in enum sometime before;
     * MONS_ANITA -> MONS_SNORG -- regenerates and described as being a
       hairy troll, so must be Snorg;
     * MONS_FAKE_RAKSHASA -> MONS_RAKSHASA_FAKE;
     * MONS_SMALL_ZOMBIE -> MONS_ZOMBIE_SMALL;
     * MONS_BIG_ZOMBIE -> MONS_ZOMBIE_LARGE;
     * MS_SUMMON_LESSER_DEMON -> MS_SUMMON_DEMON_LESSER -- I like
       hierarchies;
     * MS_SUMMON_DEMON_1 -> MS_SUMMON_DEMON_GREATER -- _1 too similar to
       _I = potential typos;
     * MS_GERYON -> MS_SUMMON_BEAST -- more descriptive of actual
       function;
     * MS_SLOW_DUP -> MS_CONFUSE -- what it is according to
       monstuff.cc:handle_wand() - removed deprecate comment from enum.h;
     * NWPN_VAMPIRE_S_TOOTH -> NWPN_VAMPIRES_TOOTH -- just too awkward as
       it was;
     * added BURDEN_STATES -- applied to you.burden_state;
     * added DEMON_CLASS -- applied throughout;
     * added HUNGER_STATES -- applied to you.hunger_state;
     * added SPELLBOOK_CONTENTS -- applied throughout;
     * added UNDEAD_STATES -- applied to you.is_undead;
     * added SHOPS -- applied to env.sh_type[];
     * expanded CLOUD_TYPES: _SMOKEs, _MIASMA, _DEBUGGING, and most _MONS
       variations;
     * expanded DUNGEON FEATURES to include elements 208,209,210 (Dry
       Fountains VII and VIII and the PermaDry(tm) Fountain,
       respectively);
     * expanded OBJECT_CLASSES to include OBJ_GEMSTONES;
     * expanded SYMBOLS to include SYM_DEBUG;
     * expanded ZAPS to include added ZAP_ISKS_CROSS -- current use
       commented out in zappy(); and
     * mass enum'ing all over the codebase -- you name it, I tried to
       enumerate it.


10.01.2000 [Brian Robinson]

     * From Josh Fishman:
          + lots of enumming, mostly spells;
          + Paladins get a long sword and long sword skill to start;
          + Spriggans may now be stalkers;
          + poisoning something already poisoned gives extra naughty;
          + more powerful staves added;
          + armour skill no longer affects penalty to spellcasting for
            wearing armor;
          + summon small mammals spell improved; and
          + Vehumet will protect against spell failures and preserve
            intelligence.
     * large characters receive a smaller spellcasting penalty for
       bearing large shields;
     * easy crawl bug in wizard mode fixed;
     * wiz commands for controlled blink and create up staircase added;
     * wiz help fixed so that all wiz commands now have help;
     * subspecies selection in newgame.cc changed to prevent duplication
       of information -- see the newgame.cc for details;
     * Ogre berserkers now start with Club skill level 3 and Maces skill
       level 1 -- the reverse of all other races, because they begin with
       clubs rather than axes;
     * Troll berserkers start with Unarmed skill level 3 and Dodging
       skill level 2, but no weapon skills -- because they start without
       weapons;
     * Halflings may now be assassins and warpers; and
     * Thieves start with more gold: random2(10) * 6 + random2(10) * 4.


30.12.1999 [Brian Robinson]

     * linuxlib.* axed
     * versions.txt updated to reflect new release
     * version and build date #defines in version.h updated
     * a little more explanatory info added to init.txt
     * some completed tasks eliminated from todo.txt and bugs.txt
     * disclaimer added to this file


27.12.1999 [Linley Henzell]

     * USE_NEW_RANDOM tuned to reasonable pace when an FP coprocessor is
       absent
     * many minor tweaks


09.12.1999 [Linley Henzell]

     * new berserk code works with ctrl+direction attacks
     * savefiles deleted after death (under DOS, at least)
     * xp no longer awarded for killing creatures created friendly
     * a few new low-level monsters
     * new init.txt options:
          + colour-code play-screen map, like the 'X' map
          + remove monsters and clouds from map
     * horned characters can wear caps and hats
     * class names switched back into lower case (where appropriate)
     * informed when a monster's enchantments wear off (if in view)
     * more information provided when looking at a monster
     * monsters no longer cast animate dead when corpses aren't in sight
     * most abilities can be used while hungry (not starving)
     * monster invisibility can now wear off (it couldn't before)
     * deflect/repel missiles enchantments now affect missile traps
     * dexterity affects shield use
     * monster AI improvements:
          + strong monsters only pick up missiles if already carrying
            some
          + some improvements made to monster path-finding
     * USE_NEW_RANDOM rand() removed -- randart code relies on random()
     * ghosts deal 2/3 as much damage; xp value reduced


18.11.1999 [Daniel Ligon]

     * shop prices right-justified
     * yellow Xom patch fixed
     * Xom will sometimes answer prayers
     * evasion strengthened
     * killed-by list enumerated; added "killed by an exploding spore"
     * many calls to 'random() % x' replaced with 'random2(x)'
     * calls to random3() and random4() eliminated
     * Makhleb's minor destruction toned down
     * amulets placed in the discovery listing
     * beginning spells fixed for kobold summoners
     * invisible undead referred to as "it"
     * Spriggan assassins permitted -- speed/low food requirements
       (Spriggan) greatly complement hand crossbow (assassin)


15.10.1999 [Brian Robinson]

     * can acquire() food: royal jellies given to non-ghouls; royal
       jellies or chunks to ghouls (attempted a variety of foods; proved
       too big a pain)
     * '#define XOM_ACTS_YELLOW' added to AppHdr.h
     * acr.cc:srand() added for USE_NEW_RANDOM to work properly


14.10.1999 [Brian Robinson]

     * fixed: problem where some super-long strings in describe.cc got
       cut up, causing a compiler error (where possible, please try to
       keep lines < 80 characters)
     * describe_god() enumerated in describe.cc
     * makefile.sgi option added to Makefile (doesn't work)
     * fixed bugs culled from bugs.txt
     * EasyCrawl(tm) door opening: walking into door opens it, running
       into door opens the door and stops player
     * GOD_NO_GOD case added to describe.cc:describe_religion() (it was
       an acr.cc special case, but that's gone now)
     * '#include <stdio.h>' added to fight.cc and spells2.cc because both
       call sprintf() (would compile/link properly without it under Linux
       but not DOS)
     * makefiles .dos, .emx, and .sol tweaked


12.10.1999 [Brian Robinson]

     * version string changed to "3.40" and '#define BUILD_DATE' added to
       version.h for output alongside version number
     * '#define USE_NEW_RANDOM' added to AppHdr.h
     * duplicate/completed items removed from todo.txt (may have missed
       some -- only cut those marked "done")
     * inspect item command (in shops) changed to 'v'
     * contents of oldmakefiles directory archived as oldmake.zip
     * make distclean now deletes *.sav, *.lab, core, and *.0* (DOS and
       Linux)
     * fixed: some class names in newgame.cc were not capitalized
     * new random number generator added -- should be a little better
       than old RNG; uses rand() rather than random() to generate number
       (#define USE_NEW_RANDOM to enable)
     * wizmode fixes:
          + some creatures (e.g., necrophage) reduce max_hp (NAB:
            reduction to zero normally means death) -- in wizmode,
            negative max_hp results, triggering "you died, but its okay"
            message every turn; added "you.max_hp = abs(you.max_hp)" to
            the 'h' wizard command to correct negative max_hp
          + stethoscope unmapped from 's' key -- terribly annoying for
            me, since I can't rest with '5' under Linux (can still
            stethoscope by targetting or looking)
          + WIZARD compiled binaries append "Wiz" to any scores they
            generate
          + help screen added, accessed by keying in '&' then '?' (lists
            wizard commands in a fashion similar to normal help screen)
          + bugfix: Daniel's command code blocked wizard command
     * Daniel's patches:
          + '#define XOM_ACTS_YELLOW' to render Xom's messages in yellow
          + bugfix: Abyss crash bug
          + new wizmode commands: "banish" and "Xom acts"
     * 'v' and 'V' commands swapped -- examining an item seemed more
       likely (to me) than version check, so "examine" now lowercased
     * wizard option added to Makefile (same as debug but includes
       -DWIZARD)
     * weapons of reaching used to attack one monster behind another may
       instead hit the monster inbetween
     * giant races penalized less for using large shields; normal-sized
       monsters may be penalized slightly more, but only by one or so
     * debug.cc:error_message_to_player() added to output:
       "You have encountered a program bug.
       Please exit the level and save."
       (previous instances of this message replaced with calls to this
       function)
     * haste and slow counters in acr.cc changed to take into account
       amulet of resist slow: haste subtracts random2(2) each turn
       (rather than one -- which could have led to infinite haste, but
       let's not worry about that) and slow subtracts five (one
       previously) each turn


02.10.1999 [Brian Robinson]

     * help screen reformatted to spot entries more readily (at a
       glance); added "more" capability so that [command summaries >
       screen size] prompt user for more, preventing screen overflow
     * amulet of maintain speed changed to the amulet of resist slowness:
       old item description mentioned both resist slow and a speed bonus,
       but the code only implemented resist slow -- wearing the amulet
       now grants +10 to any hasting and also to maximum possible hasting
     * some silly messages involving hasting and slowing changed
     * messages indicating spell-casting failure added to the raise dead
       functions, but I'm not sure they work (coding very confused here;
       may only work some of the time)
     * '#ifdef LINUX'-ed the acr.cc code [lines 663 - 676] which uses
       variables declared in another '#ifdef LINUX' block (something may
       be screwed up because I'm not sure what's going on here)


29.09.1999 [Brian Robinson]

     * highscore() fixed so that it doesn't take so long
     * scores output padded with some whitespace to improve appearance
     * bugfix for 'a' being in scores (see bugs.txt and ouch.cc)
     * comments added to enum.h showing where unique monsters are
     * first argument removed from view.cc:draw_border() (same value
       always passed)
     * bugfix: player's score not always saved
     * some problems with the new makefiles noticed while compiling under
       DOS: any platform with its own library (e.g., liblinux) should be
       +='ed to OBJECTS in appropriate system-specific makefile
     * Makefile: noopt (no optimization) added to allow me to compile
       under DOS without headaches


28.09.1999 [Daniel Ligon]

     * linuxlib.* renamed to liblinux.*
     * keypad for ncurses (Linux port) enabled
     * liblinux.cc:kbhit() will always return 0
     * big lookup table added to liblinux.cc to convert keypresses into
       commands
     * enumerated commands added to both enum.h and big switch statement
       in acr.cc
     * Brian's makefiles added


24.09.1999 [Brent Ross]

     * bugfix for evasion
     * macro.cc:getch_mul() reverted
     * red devils have probablistic chance for (trident|demon trident|no
       weapon)
     * demon tridents correctly coloured
     * xp spending cap/MAX_SPENDING_LIMIT
     * broad axe, spiked flail, and great flail less common
     * floating point operations in update_corpses() reduced
     * all demonspawn scales/plates can be given at one or two levels
     * max_hp ceiling displayed when player's max_hp reduced
     * from Linley:
          + portal fixed so that it doesn't go below level 27
          + fixed checks for translocating in the Abyss
          + added fix for going to Pandemonium or the Abyss from Hell
          + note about using '+' for targeting added to various prompts
          + ghosts fade away only if they have fewer than half their hp


12.09.1999 [Linley Henzell]

     * "Over-map" added
     * messages can be coloured -- just call set_colour() before mpr()
     * wild magic effects do more harm; increased likelihood of higher
       levels of effect
     * blink may not work and teleport takes longer in the Abyss
     * a few unrandarts tweaked
     * rewrote part of dungeon.cc weapon generation function; added
       weapon rarity function
     * some monsters receive a wider range of weapons
     * many high-powered demons have greater speeds
     * several changes to skills.cc; having many xp in the pool increases
       the cost of exercising
     * threshold values increased for special "you hit" messages and some
       grammar patched -- see fight.cc
     * three 'silly' monsters removed: dorgi, sword, and guardian robot
     * haste has a direct effect on time_taken, rather than being treated
       separately -- see player_speed()
     * boots of levitation allow permanent hovering
     * random events in Hell are much nastier
     * clouds can be overwritten by other clouds, sometimes -- see
       place_cloud()
     * monster mutation spell affects monsters as polymorph
     * new init.txt variable [verbose] determines level of detail about
       randarts and other magical items in character dump
     * monsters can cast 'direct' spells (e.g., smiting) over other
       monsters if targeting player
     * giants given the correct number of rocks


09.09.1999 [Brent Ross]

     * damage lowered for some new weapons; tridents made heavier
     * some changes from Dustin Ragan added to the newgame screens
     * spellcasting reduced by weapon size [weight and/or speed]
     * from Linley:
          + verified helmet/helm colour initialisation to LIGHTCYAN
          + swapping item letters outputs both items affected
          + '=' fixed to '==' in randart.cc line 1515
          + bugfix: more scrolling problem under DOS
          + bugfix: problem with the ctrl-direction keys under DOS
          + subspecies selection made into compile time option
          + horns mutation removed as a possibility for minotaurs
     * Great Swords skill removed -- great swords/triple swords treated
       as long swords
     * Trolls + troll leather changed to no effect
     * gdbm stuff removed -- makes things simpler; better security can
       wait for new savefile implementation
     * hand-and-a-half weapons:
          + no bonus if weapon is cursed
          + 1-1/2 hand weapons don't get the speed bonus past 10
          + two-handed weapons can get as fast as speed 7 with skill
          + +random2(3) to hit
          + +random2(3) to dam [all two-handed weapons] applied after
            skill multipliers (i.e., with the dwarf and orc modifiers)
     * multiple shield blocks in a turn becomes increasingly difficult
     * fighters get dodging or armour skills on basis of starting armour
     * shields and large shields slow down attacks


27.08.1999 [Brent Ross]

     * character dump includes '*' for level 27 skills
     * removing the "skill_change /= 2" line from spell skills was a bit
       hard on early spellcasters (it seems reasonable to give to
       low-level characters and phase out by mid-game, when it isn't
       needed)
     * bugfix: "Crush" required conjurations (hold over from Throw
       Pebble)
     * bugfix: having 1 xp in the pool permitted a lot of free practising
     * penalty increased for heavy armour, now more in line with the new
       shield penalty (are these values high enough?)
     * Linley's new weapon suggestions added: axe, spiked flail, great
       mace, great flail
     * damage increased for some maces and flails (swords are quick and
       accurate, maces and flails hit harder)
     * "Boots" changed to "Barding" in centaur/naga equipment lists
     * crystal plate mail somewhat resistant to corrosion
     * +/- markers added to skills screen for benefit of monochrome
       displays
     * bugfix: labyrinth problems
     * bugfix: LOS corner problem
     * bugfix: can now make with -DWIZARD
     * spellcasting/invocation interference removed
     * weapon additions: broad axe [rare, 15, +3, 17], trident [9, -2,
       16], and demon trident [evil -- wielded by red devils: 15, -2, 16]
     * polearms/whips of reaching added
     * gladiators given choice of starting with trident
     * '#define USE_NEW_BERSERK' removed
     * bugfix: incorrect display of barding AC value
     * quite a bit of cleanup (converting ints to enums in the old code)
     * draconian AC gains clean-up; removed level four increase and gave
       two AC at start
     * knife added; guaranteed on the first three levels
     * bugfix: memorizing spells was impossible on some terminals


08.08.1999 [Brent Ross]

     * bugfix: Orange Brains could hang game (MS_SUMMON_LEVEL spell in
       Abyss)
     * bugfix: monsters should no longer occur "under" the player
     * bugfix: portals weren't closed on way out, but hell gates were
       removed (now all are closed)
     * bugfix: cannot unlearn spells outside the array bounds
     * bugfix: manuals should auto-identify on the first read
     * bugfix: Healing book was available from acquirement/Sif Muna
     * missile launchers no longer train/use associated skill when used
       as melee weapons (bows/xbows will train/use maces/flails, slings
       use no skill)
     * Zot traps will no longer message their effects on monsters unless
       monster within LOS
     * bugfix: liquid flame could wrap around and last a long time
     * bugfix: whatever caused "program bugs" to occur in the Abyss
     * bugfix: number of cards in Decks of Power defaulted to 0 and thus
       gave 255 cards
     * Nemelex fixed to give cards instead of Bone Lanterns and Geryon
       Horns
     * bugfix: food was not updating with cards
     * bugfix: quick blades were getting free actions
     * spell points update when Invocations gained
     * granularity of skill gain upped to reduce "stage three":
          + number of learns from manuals upped to accommodate
          + monster xp values reduced to limit "stage two" effect
     * power of smiting again reduced (seems reasonable now)
     * teleport control restrictions (some areas will not allow
       controlled teleport)
     * runes may be stacked
     * invocations and spellcasting learning interfere with one another
       (like elemental magic)
     * increased rate of skill cost per level
     * removed division by two for cost of spellcasting skills
     * greater rarity for unique artefacts (all seem to enter quickly
       into any game, except the Sword of Power, for which the 50% chance
       against creation probably kept it out of my last game for a while)
     * evasion/shields were too good:
          + shield blocking difficulty raised a bit (from base 10 to 15)
          + player's evasion rolled in the monster to-hit check (so that
            a player with an EV of 30+ can still be hit)... added a 1/15
            chance of hitting regardless (players already got this
            advantage).
     * *.h guards moved to after the headers (cosmetic)


30.07.1999 [Brent Ross]

     * bugfix: visiting Abyss from Hall of Blades resulted in an Abyss
       populated by blades
     * bugfix: problems with highscore entries running off end of the
       line
     * electrical and poison resistances no longer absolute -- 1/3 damage
       taken on successful resist (still no poisoning for those with
       poison resistance)
     * storm dragon breath can be resisted
     * draining will drain available xp pool, too
     * spell levels moved to a function to prevent amassing a large
       number of negative spells (forgot spell that didn't exist)
     * spellcasting more difficult to get
     * bugfix: plants stalking stairs
     * dragon armours reverted to original values -- resistances and
       benefits given are good enough (basic heavy armours were the ones
       in real need of improvement)
     * bugfix: distortion weapons (from Jesse)
     * bugfix: deflect missiles status wasn't listed on '@'
     * slime pit runes are only "possible" runes -- unlikely to get four
       of them now
     * stats added to "elf" dummy monster to allow elf zombies to live
     * added redraw after projected noise
     * bugfix: objects (runes, orb) were clobbered by items given to
       monsters.
     * monster descriptions with huge gaps in them were fixed
     * bugfix: shapeshifters shouldn't polymorph into dancing blades
       (numbers for names)
     * acquirement() better than before for jewelry
     * skills screen can handle more than 26 skills
     * levels of poisoning shown for '@'
     * traps more difficult to disarm as dungeon level increases
     * traps might trigger during attempts to disarm
     * all traps handled by handle_traps()
     * are the new traps too hard on monsters? (probably yes, so they
       take old damage amounts for now)
     * player_light_armour() added, which returns true if the player is
       in light or no armour
     * bugfix: non-flying monsters were flying over traps
     * polymorphed monsters not much of an easy xp trick anymore
     * xp calculation takes into account a monster's speed
     * plant learning capped (no more than first two levels of fighting
       skills)
     * some support added for explosions destroying potions/food on
       ground are only the correct things being destroyed? -- check
       bang.cc and destroy_item()
     * wearing heavy armour provides a minium percentage of damage
       reduction:
          + percent = (skill + base AC of body armour)
          + still needs application to monsters, but monsters don't
            convieniently know whether they possess hard armour (let
            alone armour skill) so this can probably wait
     * extra protection from shrapnel attacks provided by heavy armour
       only


13.07.1999 [Brent Ross]

     * entrance to the Labyrinth blocked until debugged
     * wizmode code in acr.cc fixed; changed some commands to more easily
       remembered letters; added an identify
     * fixed some cases where cursed jewelry plusses are assumed to be
       based off 100 (creation code and many other cases suggest that
       it's 150)
     * random weapons, armour, and jewelry from acquirement() are now
       uncursed
     * demonspawn horns smoothed out so it's possible to get two levels
     * ranger changed to hunter
     * some gmon_use values changed (from Linley)
     * life protection descriptions changed
     * hunger_inc and ATTR_LIGHTNING_RESIST moved to functions in
       player() -- the attribute is now replaced with
       ATTR_DIVINE_LIGHTNING_PROTECTION (used to denote Makleb or Xom
       protecting player from a lightning attack)
     * checks added for the curses keypad enums
     * learning curve for throwing skill lowered
     * hand crossbows reduced in power
     * learning curve for traps and doors skill lowered
     * played with spellcasting staff identification
     * player ghosts fixed:
          + monsters regenerate hp while player is off level
          + ghosts regenerate and teleport away when player leaves the
            level
     * assassins changed from ninja to hand crossbow types; given
       enchanted dagger as well to help hand-to-hand
     * throwing exercise added to darts, hand axes, daggers, and spears;
       throwing skill bonus added for them, as well -- see item_use.cc
     * scythes, halberds, and glaives given a chance to be weapons of
       speed


07.07.1999 [Brent Ross]

     * breath from ice-breathing dragons won't destroy walls
     * life protection now a (level/3) chance
     * bugfix: the 120/150 hp ghost thing
     * anticheat code and security db added for multiuser systems
       (requires gdbm)
     * only picking up items has associated delay with autopickup,
       walking over uninteresting stacks shouldn't cost any extra time
     * berserk players fail the check_awaken() test with monsters and do
       not spend experience on stealth
     * dexterity added to stealth
     * ogre magi given short swords instead of daggers
     * stabbing stun effect toned down
     * stabbing dex bonus toned down -- now limited by stabbing
     * assassins start with a dagger; thieves start with short sword and
       dagger
     * stat mods reversed for thief and assassin; assassins given unarmed
       combat
     * wizard stat mods changed to +7 int/+3 dex, making them smarter
       than other spellcasters
     * draconian rangers no longer start with leather armour
     * stealth toned down a bit (and again) in player.cc:check_stealth()
     * to-hit reduced for throw fire/frost and sting -- see
       it_use2.cc:zappy()
     * bugfix: repel/deflect missiles problem -- changed bad REPEL
       reference in acr.cc
     * message added to unwielding vampiric weapons
     * new keypad support hacked up for Unix
     * shots used up 1 in 3 times
     * bonus for crossbows' to hit and dam (item_use.cc)
     * magic resistance for elves (player.cc)
     * autopickup delay upped to 3 (one and two seem to be no delay at
       all)
     * opposing elemental staves can be identified (items.cc, spell.cc)
     * zipfile removal added to ouch.cc to prevent cheating
     * bugfix: view.cc STABBING check should be STEALTH for the no-yell
       check; lowered to a straight percentage check
     * Dwarven/Orc rangers given Dodging 1 (they were a bit short on
       skills)
     * HOrs get orcish bolts (newgame.cc) -- added MISSILES check in
       HILL_ORC check
     * gladiator/fighter modifications: (newgame.cc)
          + fighters: skills -- fighting 3, weapon 2, dodging/armour 2,
            shields 2, stabbing/stealth 1, throwing 2; stats -- str +7,
            dex +3
          + kobold/troll/ogre fighters: same as before
          + gladiators: skills -- fighting 3, weapon 3, dodging/armour 2,
            shields 1, unarmed combat 2; stats -- str +6, dex +4
          + comparision to previous values:
               o fighters: lost unarmed combat; +1 shields and +1
                 throwing
               o gladiators: -1 dodging/armour and -1 shield; +2 unarmed
                 combat
               o stat bonuses swapped
               o armor for gladiator/fighter switched


22.06.1999 [Brent Ross]

     * new ranger weapon variations (halfling slingers, dwarven
       crossbowers)
     * Ranger/Reaver problem fixed -- 'R'angers are now 'r'angers (so
       capital letter R used only once)
     * stealth improvements:
          + monsters don't yell (2 * skill) % of the time -- see
            view.cc:monster_grid()
          + large races lose *2 modifier, small races receive *5/2 -- see
            player.cc:check_stealth()
               o Huge (x1): Troll, Ogre, Ogre Mage, Centaur
               o Awkward (x3/2): Minotaur, Draconians
               o Normal (x2): Everyone else
               o Small (x5/2): Halfling, Gnome, Kobold, Spriggan, Naga
                 (Naga's aren't small, but they're good)
          + BEH_CHASING_I set for sleeping monsters who are stabbed
          + now a (skill + dex)% chance of stabbing fleeing or confused
            monsters -- see fight.cc
          + backstab effectiveness depends on the monsters behaviour:
               o sleeping monsters are easy targets -- lots of damage
                 potential
               o fleeing and confused monsters -- not as much damage
                 potential
               o other cases have even less damage potential
          + backstabbing more effective for daggers: daggers add dex/3
            damage before the multipliers -- see fight.cc
     * fight.cc:monster_dies() modified so that *any* summoned creature
       killed by player/pet won't call done_good()
          + Elivion/TSO/Zin have to be passed through (not a problem
            because they can't abuse summoning, anyway)
          + this could use a better fix (i.e., tracking who summoned
            which monsters would help a lot)
     * (Linley's suggestion) monster polymorph fixed to avoid NO_EXP
       monsters: added "mons_flag(targetc, M_NO_EXP_GAIN)" to do-while
       loop
     * (Jesse's suggestion) teleport control/blink spell combo removed:
       CONTROL_TELEPORT check removed from random_blink()
     * racial bonus added to worn armour in player_AC()
     * patched hunger status display bug: added food_change() and redraw
       to down_stairs


17.06.1999 [Brian Robinson]

     Note: I've tried to annotate all my changes in the code with my
     initials [BCR] so you can grep for them to find my changes.

     * some small cleanup here and there
     * new makefile written for Linux
     * changes to the make process which should spare us future
       headaches:
          + OS_TYPE variable in the makefile that is automatically made
            into a #define during make process (should make it easy to
            keep the makefiles straight on the OS)
          + moved OBJECTS variable containing the list of the *.o files
            to a file called make.obj which is included into the makefile
            (should save a little space and keep all makefiles consistent
            on object requirements)
     * defines.h indented and added a header
     * some newgame.cc oddness fixed: various system dependent name
       checks were all messed up in a bunch of nested #ifdef stuff
       (sorted it out)
     * '#define MACROS' now does something: if defined, macros.h and
       macros.cc files will be used, otherwise they won't (right now,
       Crawl will not work correctly under Linux with MACROS defined --
       see bugs.txt)


14.06.1999 [Brent Ross]

     Some changes I added from Linley:

     * bugfix for the Geryon bug
     * message added for berserkers chopping up corpses in rage
     * some incorrect enums in it_use3.cc (for Asmodeus's staff) changed
     * demonspawn xp penalty lowered to 140%
     * Elyvilon sacrifice code fixed to limit abuse
     * priest.cc and priest.h renamed to abyss.*
     * spellcasting penalties for wearing shields upped to +5/+15/+30
       from +0/+5/+15 [buckler/shield/large shield]
     * random stat increase added for Draconians


13.06.1999 [Brent Ross]

     * Spriggans fully separated from the giant races, creating a
       separate block for tiny races in the armour wearing code
     * cursed rings identify themselves as "sticky cursed" when put on
     * weapon slot updates if player eats food that is being wielded
     * bugfix: black and grey scales reversed for demonspawn (with
       regards to number of levels gained)
     * for spells1.cc, blink() and random_blink(): weapons check removed
       because scan_randarts should be only requirement
     * bugfix: teleport control now works properly on blink (dependent on
       order of includes and target compiler/system)
     * #ifndef checking added around all *.h files to avoid problems
       similar to those above
     * full spell listing line added to character dumps
     * creaky doors are [DEX + (Stealth + Traps) / 2] checks; check added
       on closing doors, as well
     * base values of heavy armour upped by 1 or 2 points
     * spells3.cc:you_teleport() was another case of only checking the
       weapon slot for a property (hopefully, I've changed all these into
       scan_randarts)
     * mutation.cc:demonspawn() had MUT_FAST twice; changed the second to
       MUT_SHOCK_RESISTANCE (as the comment claimed)
     * strength damage bonus had an ugly discrete nature to it;
       multiplied the dammod values by 6 to get a smoother version of the
       same function
     * bugfix: screen needed to be refreshed after spell slot changes
     * new equipment listing commands:
          + ')' lists current, swap a, swap b, and default 'f'ire weapons
          + ']' lists worn armour
          + '"' lists worn jewelry (NB: '=' already used elsewhere)
     * bugfix: "shoot_skill = you.skills[SK_THROWING]" in item_use.cc was
       wrong (should clearly be CROSSBOWS when using a crossbow)
     * bugfix: handle_traps in misc() used env.trap_known instead of
       trap_known (env.trap_known doesn't seem to be referenced anywhere
       else)
     * bugfix: Vehumet's gift was still not quite correct
     * magical staves detection: staves may be detected over time or
       whenever appropriate magic is cast, depending on skill levels
     * Call Imp raised to a level three spell (too powerful for level
       two)
     * a little checking code added to dungeon.cc for monster armour
       plusses
     * bugfix: more line was misplaced on the recognized item screen
     * mix of my/DML's improvements applied to the temp file purging
       system


02.06.1999 [David Loewenstern]

     * Makefile.dos added
     * define.h updated for compatibility with DJGPP
     * items.cc, monstuff.cc, mstuff2.cc, and spells.cc cleaned up
       (mostly corrected misassignments, unsigned<->signed, unused vars,
       etc.)
     * enums added to monstuff.cc, mstuff2.cc, beam.cc
     * enum.h updated as per above
     * autopickup added
     * '&' command functions only in debug mode
     * remove_ring() now uses inventory letter
     * fight.cc features more colourful "hits" (should be useful later to
       differentiate weapons)
     * bugfix: displaying top scores when no scorefile previously had
       existed


30.05.1999 [Jesse Jones]

     * highscore() will print more scores on larger windows
     * worn cloaks no longer prevents wearing or removing body armor
     * worn armor can be dropped if it's uncursed
     * armor can be worn without removing the old armor
     * missing ponderous armor message added
     * from Brent:
          + bugfix: weapon line didn't always redraw after casting Blade
            Hands
          + detect_items() uses '~' instead of '*'
          + char_dump.cc dumps failure rates
     * wear_armour() changed to allow Spriggans to wear bucklers
     * quit only pops up save changes dialog if game_has_started is true
       (Mac)
     * AppHdr.h replaces config.h
     * all *.cc files include their header immediately after the AppHdr
       file


??.05.1999 [Brent Ross]

     * GNU indent 1.91 [-bad -bli0 -i4 -npcs -npsl] applied to get the
       intended BSD indentation style into the code; sorted through some
       things indent won't fix (more cleanup needs to be done -- notably,
       vertical whitespace and breaking up big lines -- but should be
       more readable now; no more column 0 code!)
     * various changes to make code work with NUMBER_OF_LINES instead of
       25
     * compile-time option to change default view to non-ibm graphics
     * ^R redraw screen command; screen redraws added to appropriate
       places
     * query added for normal saves (^X doesn't ask)
     * ^Y works now; ^Z suspend for Unix systems
     * refresh call added to beam.cc so beams are always visible
     * various things to deal with multiuser environment:
          + compressing save files
          + permissions handling
          + global lib directory for game files
          + changes in name validation and file name structure (added
            uid)
     * adjust item letter function now swaps items (instead of failing)
     * Selective Amnesia spell description is less confusing
     * targeting more intuitive for Angband players (t/space accepts
       targets), behaves better about canceling spells (added better
       abort)
     * unarmed combat fixed to the correct amount of time
     * bugfix: hunger/noisy wield bug where effects were not removed
     * bugfix: air staffs didn't grant resist lightning, yet took it away
       (i.e., left the resist with a value of 255, quite good unless you
       put on something of resist lightning later)
     * rings/wands/scrolls and such output a message when they are
       identified by use
     * fixed several cases where wielded object changed but the screen
       didn't update
     * bugfix: a triple level of a demonspawned mutation was never
       granted
     * patched bug where the inventory is full yet the count is wrong
       (this entire thing should be cleaned up)
     * curses attributes fixed so that alternate character sets aren't
       used under Solaris (this is probably good for any *nix not on a
       IBM alternate character set box)
     * water and earth elementals fixed for same
     * stone lined the finishing room so you can't dig through?
     * some rather silly ways of clearing areas of the screen (under
       curses) removed; proper curses functions used instead (much
       faster)
     * bugfix: going up or down stairs would clear the food status
     * bugfix: incorrect substitutions of new enums (i.e., "AC +=
       SP_HIGH_ELF; /* troll */")
     * bugfix: stat increases where comment noted "/* str or dex */", but
       "str or int" given instead
     * Troll's food consumption increased to better balance the race
     * Vehumet's gift giving code fixed to actually do what is intended
     * experience pool information added to front page
     * some of the duplicated titles (traps and doors) changed
     * stairs leading out of sub-dungeons changed to '<' character, to
       reflect the key required
     * portals coloured on the level map; all portals in Pandemonium are
       intentionally the same colour
     * kobolds receive stat increase every five levels
     * bugpatch: Demonspawn sometimes don't receive their mutations
     * Armour skill a bit better: get more in combat, a little more
       frequently otherwise; EV penalty is now recovered at skill/2
     * Sword of Power reduced in power (now +20 cap, HP/13 - 3)
     * creaking doors partially depend on skills (dex + traps + stealth,
       with benefits of last two dropping after a total of 10) instead of
       simply luck; levitation isn't a sure way to avoid this now
     * wield update inserted after reading scroll of recharging
     * high score file extended to SCORE_FILE_ENTRIES items (currently,
       only the first 15 are ever displayed)
     * USE_NEW_BERSERK:
          + berserk counter decrements faster when not attacking
            (currently using triagular progression)
          + butchery is not penalized (in fact, it resets penalty
            counter); eating isn't either (no reset, though)
          + exhausted counter added to count berserk fatigue
          + hopefully this will become part of a new, better standard
            berserk
     * skills fit onto screen by wrapping the first column (if required)
     * bugfix: RAP_PREVENT_TELEPORT and the like didn't do anything
       because they checked only the weapon, instead of using
       scan_randarts (hopefully, all the cases of this are fixed now)
     * bugfix: wield-amulet-that-you're-wearing bug
     * redraw for weapon when Blade Hands expires
     * #defines:
          + CRAWL_NAME -- auto sets player's name
          + CRAWL_PIZZA -- string describing player's choice of pizza;
            greater likelihood of incidence than others
          + USE_BSTRING_H -- handles the bstring.h/string include problem
          + NUMBER_OF_RUNES_NEEDED (defaults to 3) -- allows compiled
            games to limit entrance to Zot's domain only to those with a
            certain number of runes
          + USE_CURSES -- for things specific to curses and not just
            PLAIN_TERM.
          + USE_TCHARS_IOCTL, USE_UNIX_SIGNALS, USE_SELECT_FOR_DELAY --
            to solve various *nix variant problems should people need or
            want them
          + USE_ASCII_CHARACTERS -- sets the default to non-IBM character
            set
          + SAVE_DIR_PATH -- useful for setting a global lib directory
            for save files, bones files, and the score file
          + SHARED_FILES_CHMOD_VAL -- useful with SAVE_DIR_PATH on
            multi-user systems
          + SAVE_PACKAGE_CMD, LOAD_UNPACKAGE_CMD, PACKAGE_SUFFIX -- for
            people who want to use a program to compress and bundle their
            save games when they're not playing (not pretty, but good
            enough until we invent a better save file system)
     * "(q to drink)" added to fountain description when player steps
       over one
     * Greater Healings base upped to 50
     * Demonspawn transmuters added
     * Spriggans and Halflings consume less food (-1)
     * wizard's hats and caps are randomly coloured
     * carrying capactiy less dependent upon strength; pulled
       carrying_capacity code into a single function (as it's called from
       various different places); encumberance levels represent fractions
       of carrying capacity instead of earlier constant values
     * named artefact weapons slightly rarer; Sword of Power has 1 in 2
       check


??.05.1999 [Jesse Jones]

     * bugfix: appeared to be three bugs involving extra semi-colons
     * file names can be longer than six characters and can include
       spaces
     * some debugging macros added
     * bugifx: dragon() wasn't handling fire drakes, which meant beam
       color was uninitialized.
     * getstr() only adds printable characters to the buffer (Mac)
     * mons_spells() now returns a struct instead of using an int array
       -- affects mstuff2.cc, mstuff.h, and handle_wand()
     * mons_near() now returns a bool. I've changed code like
       "mons_near(o) == 1" and "mons_near(i) != 0" to "mons_near(o)" and
       "!mons_near(i)"
     * print_description() no longer indexes past the end of the string.
     * minor changes made to the code to allow compilation with the
       "require function protypes" warning
     * UNUSED template function added to config.h
     * rewrote describe.cc and describe.h:
          + reformatted
          + string objects used in place of hard-coded char arrays
          + ten new functions split out from describe_item()
          + get_item_description() and is_random_artifact() added
     * rewrote chardump.cc
          + reformatted
          + string objects used
          + seven functions split out from dump_char
          + dumps artifact info
     * reformatted viewwindow2(); added some ASSERTs; split out
       get_ibm_symbol()
     * reformatted monster() and split out ten(!) new functions
     * reformatted mons_spells() and mons_cast(); mons_spells() case 49
       uses RED instead of (bogus) 20 for color
     * some ASSERTs added to seekmonster()
     * DEBUG renamed to WIZARD
     * DEBUG_BUILD renamed to DEBUG
     * manage_corpses() renamed to handle_time()
     * code changed to use new CORPSE_BODY and CORPSE_SKELETON enums
     * struct.h deleted
     * player::elapsed_time added (holds the total amount of elapsed time
       in the game)
     * level and game save routines tweaked to include a variable sized
       chunk of extra data
     * save level code saves a timestamp; load level code uses timestamp
       to update corpses and chunks
     * many player struct members renamed
     * all of the monsters, item_struct, and ghost_struct members renamed
     * comment blocks added to the top of all files
     * TRACE debug function added
     * you and env are no longer arrays
     * bugfix: display_char_status() displayed the wrong message if the
       player had magic contamination
     * look_around() no longer prints a prompt (so things like blink and
       open door no longer prompt "Press '?' for a monster description.")
     * show_map() accepts '\r' along with '.'
     * Cekugob no longer conveys resistances to fire and cold
     * spellbook_contents() prints unknown spells in light blue
     * show_map() draws shops in yellow
