summaryrefslogtreecommitdiffstats
path: root/crawl-ref/docs/obsolete
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2006-11-22 08:44:28 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2006-11-22 08:44:28 +0000
commit6adb570984828b2c36de2952c18e722641fbf802 (patch)
treed5365635676e7e8f10133a4e4e66d8eceb68e098 /crawl-ref/docs/obsolete
parent1d0f57cbceb778139ca215cc4fcfd1584951f6dd (diff)
downloadcrawl-ref-6adb570984828b2c36de2952c18e722641fbf802.tar.gz
crawl-ref-6adb570984828b2c36de2952c18e722641fbf802.zip
Merged stone_soup r15:451 into trunk part 2 (non-source changes).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@453 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/docs/obsolete')
-rw-r--r--crawl-ref/docs/obsolete/buglist.txt423
-rw-r--r--crawl-ref/docs/obsolete/changes.3401860
-rw-r--r--crawl-ref/docs/obsolete/changes.4003278
-rw-r--r--crawl-ref/docs/obsolete/messlog.txt562
-rw-r--r--crawl-ref/docs/obsolete/todo.txt456
-rw-r--r--crawl-ref/docs/obsolete/versions.txt782
6 files changed, 7361 insertions, 0 deletions
diff --git a/crawl-ref/docs/obsolete/buglist.txt b/crawl-ref/docs/obsolete/buglist.txt
new file mode 100644
index 0000000000..c9a33b3b8c
--- /dev/null
+++ b/crawl-ref/docs/obsolete/buglist.txt
@@ -0,0 +1,423 @@
+ Bugs Outstanding
+
+
+Compiling
+
+
+COMP01. [unknown - no date]:
+makefile.sgi for IRIX does not work -- no clue why
+
+COMP02. [unknown - no date]:
+DJGPP may puke up a lung on some of the very long functions if
+compiled using certain options -- sometimes simply running make
+again will work; sometimes changing the options will force compile
+
+
+
+
+Critical Errors
+
+
+CRIT01. [BCR - 10 Jan 2000]: weird crash bug: trying ctrl-numbers
+(for control movement under Linux) from the top of the keyboard and
+ctrl-4 apparently kills the program -- ran it in the debugger and
+it said it got a SIGQUIT signal in libc_read
+
+CRIT02. [unknown - no date]:
+skeletal warrior cast a spell and seg-faulted the game in the Abyss
+
+CRIT03. [unknown - no date]:
+sometimes leaving the Abyss through an exit sends game into an
+infinite loop -- hard to replicate, though
+
+CRIT04. [unknown - no date]:
+using stairs/portals sometimes misplaces the player, either into
+solid rock or onto bogus levels -- e.g., level 28 of the dungeon,
+level -1 of a sub-dungeon
+
+CRIT06. [jmf - 31 mar 2000]:
+Taking down stairs onto new level sometimes hangs the game.
+Hard to replicate.
+
+CRIT07. [jmf - 31 mar 2000]:
+Dungeons sometimes generated that feature off-the-edge corrodors.
+Monsters or player moving too close causes segfault.
+
+
+Platform Specific
+
+
+PLAT01. [unknown - no date]:
+Linux: various odd effects when playing in term -- may be
+terminfo's fault
+
+PLAT02. [DLB - 12 Jan 2000]:
+Playing under Linux, I am encountering an atrocious "garbaging" of
+the screen in Wizmode -- the screen fails to update properly after
+using the wizmode help function (&-?) ... has anyone else
+encountered this. Also, keypad support is very spotty under Linux,
+or at least mine ...
+
+ [BCR - 12 Jan 2000]:
+ Yeah, Linux support is still far from perfect. I've never been able
+ to get shift or ctrl numpad keys to work in Linux, and have had
+ various display problems. The wizmode help actually uses the same
+ function as the regular help, so it should behave the same.
+
+ [DLB - 20 Mar 2000]:
+ Still no support under Linux console for keypad when in 'X'-map
+ mode
+
+PLAT03. [BWR - 13 Jan 2000]:
+The escape key no longer seems to be cancelling my actions (ie.
+looking at spell lists, maps, etc.). This is a desired feature
+because I typically don't trust space in roguelike games. (This is
+under Solaris.)
+
+ [DLB - 13 Jan 2000]:
+ I noticed this "feature" under Linux, as well ... guess I am not
+ the only one.
+
+ [BWR - 18 Jan 2000]:
+ I've looked at the escape problem and the problem is that at some
+ point the keypad( stdscr, FALSE ) line turns into a TRUE. This ends
+ up cooking escapes (it has to pause for a bit to wait to see if its
+ an escape sequence and this screws up all the checks for escape).
+ I've moved this into the #ifndef SOLARIS block with the scrollok.
+ Everybody here uses roguelike keys except for those people who are
+ luck to get terminals that will output the actual numbers in one of
+ their modes, or have hacked their xmodmap to handle the keypad (to
+ do pretty much the same).
+
+PLAT04. [BWR - 20 Mar 2000]:
+There's one other bug that we seem to have here (under Solaris).
+Occasionally the game hangs when changing levels. At first it was
+only happening to one person, so I thought it had something to do
+with his environment (I know he's giving incorrect term types to
+get colour, as well as doing some magic with xmodmap to get the
+keypad to work on some terminals), but it did happen to me once so
+I know its real. Nothing really special about the stairs I used,
+they were regular dungeon (I've noticed his games have hanged in
+sub-branches) and I had no monsters around me. This could be a
+problem with either level generation (I was going to a new level)
+or with the save level function. Don't have much time to look at
+either... keep your eyes open for it, if it doesn't happen anywhere
+else, its probably with the SOLARIS or SAVE_GAME_DIR code.
+
+PLAT05. [BCR - 9 Mar 2000]:
+Its not a big deal, but 2 and 8 on the numpad still don't work with
+ctrl for disarming traps. We should at least stick it in the
+buglist. (This is under Windows NT.)
+
+ [LRH - 13 Mar 2000]:
+ Re: the bug with ctrl-2 and -8 not working: IIRC The last time this
+ happened it was as a result of the keyin variable in which
+ keypresses entered in the main input loop are stored having been
+ set either signed or unsigned, I don't remember which (just that it
+ was the wrong one). The problem is that the values for ctrl-2/ 8
+ are above 127, so when the variable declaration was changed they
+ either started or stopped wrapping.
+ Of course, it's a while since I've done any coding, so don't
+ believe everything I say.
+
+ [BCR - 13 Mar 2000]:
+ I spent some time debugging today and it seems that the ctrl-8/2
+ problem under NT is a library bug. The external getch() function
+ doesn't return when you hit those keys. This maybe be a DJGPP
+ thing. I have the borland compiler on this comp too, so if I get
+ some time I will try setting it up and seeing if the problem is the
+ same there as well...
+
+
+
+
+Display
+
+
+DISP01. [Graeme Dice <grdice@home.com> - 10 Jan 2000]:
+(small, cosmetic) bug with the new, cool XP-left-for-skills
+display: when one gains skills such that 3-4 digits of XP are
+removed, the right parenthesis is not removed (^R fixes)
+
+DISP02. [unknown - no date]:
+missing space when printing gold amounts?
+
+DISP03. [unknown - no date]:
+hunger status not redrawn with level change -- happens when
+engorged and I think also when full
+
+ [BWR - no date]
+ should be fixed now
+
+ [JDJ - no date]
+ still not fixed
+
+DISP04. [unknown - no date]:
+check for screen length problems and fix them -- e.g., map
+centering is still off base, line 12 (should this be shifted for
+longer windows?)
+
+DISP05. [BWR - 18 Jan 2000]:
+Speaking of the help screen, the help for the fast scroll on the
+map screen is still wrong: the commands are +/- not +/& like it
+implies.
+
+DISP06. [Tloma Desk - 7 Feb 2000]:
+When gaining level during zapping some bolt towards the top of the
+screen, part of bolt is drawn at the bottom of the screen.
+
+DISP07. [DLB - 17 Mar 2000]:
+the key for list weapons is not displayed after issuing a '?'
+command
+
+DISP08. [DLB - 18 Mar 2000]:
+The spell "Detect creatures" should be "Detect Creatures" (both
+words capitalized) when viewing list of spells known.
+
+
+
+
+Items
+
+
+ITEM01. [LRH - 12 Jan 2000]:
+When you eat a poisonous corpse while poison resistant, it always
+makes you ill (ie diseased) -- Should this be fixed?
+
+ [BWR - 12 Jan 2000]:
+ Almost certainly. Doesn't make sense to punish players like this.
+
+ITEM02. [unknown - no date]:
+"-5 stone" heavily enchanted to do *more* damage and costs 100
+
+ITEM03. [unknown - no date]:
+jewelry shop generated "+6", a missile weapon
+
+ITEM04. [unknown - no date]:
+found "an amulet of Cekugob" (an unrandart) that should identify as
+"the amulet of Cekugob" -- a 'V' check indicated none of its
+powers, but at least some of them were being applied to my
+character
+
+ITEM05. [unknown - no date]:
+an item is cursed if its "iplus" value is "big enough" -- however,
+"big enough" is >80 in some places, >130 in others, and perhaps
+>120 in others (I'm not sure about the >120; I recall seeing it but
+can't find it now). Right now I have an artifact ring that I can't
+uncurse since the value used when uncursing is 130 and the value
+used when sticking is 80 -- the uncursing code checks against 80 on
+one hand and against 130 on the other
+
+ITEM06. [CDL - 18 Mar 2000]:
+I had just had a level 7 Spriggan Venom Mage, with all of his 24
+HP, die from reading a scroll of immolation. The official cause of
+death was listed as "killed by bad targetting".
+
+ [DLB - 18 Mar 2000]:
+ Appears that item_use::read_scroll() for
+ SCR_IMMOLATION hands off a value of beam.thing_thrown as KILL_YOU
+ to bang::explosion() and is eventually handled by these lines:
+
+ if ( beam[0].thing_thrown == KILL_YOU
+ || beam[0].thing_thrown == KILL_YOU_MISSILE )
+ ouch(hurted, 0, KILLED_BY_TARGETTING);
+ else if (beam[0].flavour == BEAM_SPORE) // cdl
+ ouch(hurted, 0, KILLED_BY_SPORE);
+ else
+ ouch(hurted, beam[0].beam_source, KILLED_BY_BEAM);
+
+ Problem is, there is no KILLED_BY_EXPLOSION, so unless someone
+ wants to add that case, KILLED_BY_BURNING (now used by "liquid
+ flames" in acr.cc only) would be the closest fit ...
+ Maybe a better long-term solution would be to add to the KILLER
+ enum cases for KILL_YOU_EXPLOSION and KILL_MON_EXPLOSION and work
+ from there ??? Right now KILL_YOU and KILL_MON serve double duty
+ for both direct (non-missile) and explosion kills -- separate them
+ out???
+
+ITEM07. [Tloma Desk - 7 Feb 2000]:
+Magical staves are identified by fighting with them.
+
+ITEM08. [Tloma Desk - 7 Feb 2000]:
+Weapon descriptions are not complete - "It's ... enchanted to do
+more damage." part is missing
+
+ITEM09. [<taran@hotmail.com> - 17 Mar 2000]:
+Reading scroll of detect curse discovers artifact names.
+
+ITEM10. [CDL - 19 Mar 2000]:
+My current character has a spell staff of destruction with these
+spells:
+
+ Spells Type Level
+ a - Throw Frost Ice/Conjuration 2
+ b - Bolt of Cold Ice/Conjuration 5
+ c - Lightning Bolt Air/Conjuration 6
+
+I am unable to cast Throw Frost with it, but can cast the other two
+spells. I can't figure out the problem, but when I added enough
+print statements, the problem went away. :(
+There's something odd going on here, as
+dungeon::spellbook_template() gets called once with "spellbook" 13,
+rather than with 53 (the above staff).
+
+
+
+
+Monsters
+
+
+MONS01. [unknown - no date]:
+artefact weapons of Holy Wrath wielded by undead
+
+MONS02. [unknown - no date]:
+monsters shout upon seeing a player who cannot see them
+
+MONS03. [BWR - 13 Jan 2000]:
+Another thing that was noticed in this version. Polymorphing
+Sigmund (or any other named monster) resulted in "a giant beetle"
+changing its form. My guess is some confusion on which table is
+being indexed.
+
+MONS04. [BWR - 27 Jan 2000]:
+On the subject of summoning, a little thing (bug) that has been
+noticed around here... summoned monsters that die overtop of
+corpses, take the corpse with them.
+
+MONS05. [<taran@hotmail.com> - 17 Mar 2000]:
+You can use Yedremewhatewer "enslave undead" invocation to enslave
+shapeshifter acting as an undead. When it changes, the enslavement
+stays. I am not certain if this is a bug or a feature.
+
+
+
+
+Characters
+
+
+PLYR01. [unknown - no date]:
+currently possible to gain zero hp when gaining a level --
+safeguards should exist to prevent negative values, if not
+guaranteeing at least 1 hp per level
+
+PLYR02. [BWR - 12 Feb 2000]:
+calc_hp() and calc_ep() need to be called before you.hp is set so
+that race-classes that start with 5 Fighting don't start with 18/19
+hps (see Ogre Fighters).
+
+
+
+
+Inventory
+
+
+INVN01. [unknown - no date]:
+full inventory doesn't account for possible item stacking or for
+picking up gold
+
+ [DLB - 19 Mar 2000]:
+ When a player's pack is full, he/she is unable to pick up gold from
+ the ground. This, at least should be allowable, if not also item
+ stacking (see parent comment).
+
+INVN02. [unknown - no date]:
+inventory count bug: inventory counter occasionally gets out of
+sync (should either be moved or fixed)
+
+
+
+
+Combat Related
+
+
+COMB01. [unknown - no date]:
+EV seems to get screwed up after transforms -- it seems to get at
+the transform value when the player has no armour (calculated
+correctly once armour is on)
+
+
+
+
+Magic
+
+
+MAGI01. [LRH - 12 Jan 2000]:
+The burn_freeze function (which covers the spells burn, freeze,
+crush and arc) doesn't set a friendly creature targetted by it to
+hostile. It should. And I really should have gotten around to
+implementing these spells for monsters, so that ghosts can use
+them.
+
+MAGI02. [LRH - 13 Jan 2000]:
+Summon Shadow Creatures is now Ice/Summoning -- this seems very
+odd.
+
+ [BWR - 13 Jan 2000]:
+ Same here.
+
+MAGI03. [CDL - 18 Mar 2000]:
+This is in player.cc:
+
+if (you.sure_blade)
+{
+ if (you.confusing_touch > 15)
+ mpr( "You have a strong bond with your blade." );
+ else if (you.confusing_touch > 5)
+ mpr( "You have a bond with your blade." );
+ else
+ mpr( "Your bond with your blade is waning." );
+}
+
+The "confusing_touch"es in the body should probably be
+"sure_blade"s.
+
+
+
+
+Teleportation
+
+
+TELE01. [unknown - no date]:
+if you have teleport control you'll see a prompt that says:
+"You may choose your destination (press '.' or delete to select)."
+I somehow got into the habit of immediately blowing by this prompt
+without ever reading it so I was always flailing around whenever I
+tried to teleport. I've changed show_map() so that it accepts '\r'
+as well as '.' (which should be much more intuitive) but I don't
+see a check for the delete key in show_map() so I think the prompt
+is wrong
+
+TELE02. [unknown - no date]:
+teleport control is really wacky -- I'd expect to be able to use
+the return key to select the square but it seems to key off one of
+the keypad keys
+
+
+
+
+Targeting
+
+
+TARG01. [unknown - no date]:
+targeting is off at times (possible rounding errors)
+
+TARG02. [unknown - no date]:
+fired beams sometimes take the wrong route and can't hit targets in
+LOS
+
+
+
+
+Codebase
+
+
+CODE01. [unknown - no date]:
+in monsters enum, values 250 to 310 should be reserved for Uniques,
+but 260 to 280 are occupied by other monsters -- should move them
+if it won't mess anything else up (if moved, remember to alter
+ouch.cc check for placing 'a' is put in front of the unique's name
+in the scores) -- not really a bug.
+
+CODE02. [unknown - no date]:
+from the code, it appears that dropping items takes zero time
+
diff --git a/crawl-ref/docs/obsolete/changes.340 b/crawl-ref/docs/obsolete/changes.340
new file mode 100644
index 0000000000..2891d5c976
--- /dev/null
+++ b/crawl-ref/docs/obsolete/changes.340
@@ -0,0 +1,1860 @@
+ 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
diff --git a/crawl-ref/docs/obsolete/changes.400 b/crawl-ref/docs/obsolete/changes.400
new file mode 100644
index 0000000000..e5d853b1f0
--- /dev/null
+++ b/crawl-ref/docs/obsolete/changes.400
@@ -0,0 +1,3278 @@
+9 August 2001, Michal Valvoda
+ * Gordon's destroy_item() fix included
+ * Complete clean-up of dungeon.cc::give_item() + few changes
+ for example
+ - Until now was a lot of items colored twice (by give_item()
+ and by item_colour()) and sometimes differently
+ - every item goes to right MSLOT-no more MISCELLANY in MSLOT_POTION
+ - magical items (wands, scrolls, potions) distribution
+ * repel undead is working again (in turn_undead() was missing call for
+ behavior_event())
+ * added messages for rotting chunks/corpses in player's inventory
+ * message when Corona wears out + few other new messages
+ * fixed some (I hope that all) problems with "polymorph other".
+ As side effect of some solutions
+ - MONS_HUMAN and MONS_ELF are now valid and fully functional
+ polymorph targets
+ - useless MONS_ANOTHER_LAVA_THING was changed to
+ MONS_SALAMANDER (in case of problem switch it off in dungeon.cc,
+ yes, there because water and lava monsters are generated differently)
+ * Renamed MSLOT_UNASIGNED_I to MSLOT_MISCELLANY, added NUM_MISCELLANY
+ * rewrote misc. object generation to use NUM_MISCELLANY.
+ Not important for now but I have many new misc. objects I want to include
+ after release and it will help later. Also new code is much more readable
+ and easier to modificate.
+ * inteligent monsters now pick up gold
+ * added some new unrand artifacts
+ (ring of Shadows is getting a bit tired :)
+ * added underground rivers and lakes,
+ improved water generation
+ * 3 new compile options
+ #define USE_NEW_UNRANDS - switches new unrands on
+ #define USE_RIVERS - switches new underground rivers and lakes on
+ #define MISSILE_TRAILS_OFF - turns misile trails off.
+ - not optimal, but works well on
+ many computers
+ - defaultly unset
+ * other minor fixes and updates
+ * changes.400 updated
+
+ Notes:
+ ! generation of water and lava monsters isn't very nice, an it would be
+ fine to change it one day
+ ! spells in WIZARD mode probably should be cast with some power
+
+
+
+
+
+
+
+BUGLIST:
+
+
+LEGEND
+** outstanding bug; reproduced or definitely needs fixing
+xx outstanding bug report; unreproducable, currently unfixable,
+ or not a candidate for 4.0.0 release
+== fixed and released in some form (alpha, beta, etc - see version.h)
+-- fixed bug, not yet released
+
+
+
+
+** Various XXX and FIXME comments throughout code from Brent.
+
+== 1. Casting "Corona" at self shows message "The 0 hits you !" and
+hurts you (same for Hibernation, maybe also other spells.)
+
+>> fixed Corona and Hibernation. Possible that other spells still
+>> allow this goofy behavior.
+
+== 2. Dwarven hunters starts with CYAN leather armor (maybe also
+others). It should be BROWN.
+
+== 3. Missing space in message "You feel verybuoyant !" (same problem
+with "You feel morebuoyant !")
+
+== 4. No message when you quaff potion of restore abilities and nothing
+happens.
+
+> fixed by Brent?
+
+== 5. Maybe there should be some message when you cast "Static
+Discharge" and no monster around.
+
+== 6. Inscription on "Innate abilities, Weirdness & Mutations" screen
+should be centered (my fault).
+
+== 7. Polymorph and unpolymorph messages are really odd -
+e.g. I polymorphed kobold and I got message
+ "The stone giantThe kobold evaporates and reforms as a stone giant."
+
+== 8. Empty ebony casket should be DARKGREY and not BLACK.
+
+== 9. Rare weapons (quick blade, double/triple sword etc.) aren't as
+rare as they should be.
+
+> line 2006 in dungeon.cc should be 1+random(10) <= rarity
+
+== 11. Missing space in "Elyvilondemands penance!". Of course, same
+problem with other gods.
+
+== 12. 2 messages when wearing crystal armor about that it's too
+cumbersome
+
+== 13. map under DOS is working bad - each next line is shifted by one
+character
+LRH - At line 1810 of view.cc, in the map function, there is a
+for loop involved in printing the map. At present it's
+for (i = 0; i < 79; i ++);. To work under DOS, the 79 should
+be 80, otherwise the map is skewed to the left and looks
+very ugly.
+
+== 14. stoneskin isn't working - if you look at cast_stoneskin() zou
+will see it does nothing with AC
+
+> I have a fix for this - basically remove the 'else' before the
+> transformation-AC-adjustment switch in player.cc::{player}_AC().
+
+> There's another "bug" there, too, which is that the corresponding
+> 'if' ought to include '|| you.attr[ATTR_TRANSFORMATION] =
+TRAN_BLADE_HANDS'.
+
+== 15. Saw "a buggy helmet"
+ "a buggy orange potion"
+ "a buggy red potion"
+
+== 16. Buggy targeting - can't hit monsters in LOS. Could fix.. both
+ for throwing and beaming?
+
+== 17. A hill Orc Chaos Knight (Zom) started with 14/15 hit points. !?
+
+== 20.One more thing that needs cleaning: the new invisible monster code.
+ You don't get a message when your missile hits a monster, but you
+ *do* get a message when your missile *misses* an invisible monster.
+ IMO if we do make invisible monsters harder to detect than they
+ were, we ought to make these (absent) messages exactly opposite:
+ no message for miss, yes message for hit.
+
+
+xx 21. wearing Troll Hide, read unknown scroll, ASSERT(index < SIZE) in
+ FixVec fails, abortion, core.
+
+== 22. Amulet of Rage isn't auto-identified when put on, but ability is
+ visible in 'A' menu.
+
+== 23. torment_monsters in spells4.cc asserts like crazy. It should have a line
+like:
+ if (mon != NON_MONSTER) {
+
+> fixed again; player wasn't getting hit. Not adding magic resist.
+
+
+== 24. In dungeon.cc there's a huge function called builder() with some code at
+ the bottom that looks like this:
+
+ if ( you.where_are_you == BRANCH_HALL_OF_BLADES )
+ {
+ for (bi = 1; bi < GXM; bj++)
+ for (bj = 1; bj < GYM; bi++)
+ if ( grd[bi][bj] >= DNGN_STONE_STAIRS_DOWN_I && grd[bi][bj]
+<= DNGN_ROCK_STAIRS_UP )
+ grd[bi][bj] = DNGN_FLOOR;
+ }
+
+ The increment in the for loops should be swapped.
+
+== 25. A backtrace does indeed reveal the problem. From line 2432 of
+ monstuff.cc:
+
+ for (count_x = 0; count_x < 3; count_x++)
+ for (count_y = 0; count_y < 3; count_y++)
+ {
+ good_move[count_x][count_y] = true;
+
+...
+
+ if ( grd[monster->x + count_x - 1][monster->y + count_y - 1] < okmove )
+ {
+ good_move[count_x][count_y] = false;
+ continue;
+ }
+
+ There's a monster at (39, 69), the above loop references (38,70).
+
+== 26. This line
+
+ unsigned char grik = grd[monster->x + mmov_x][monster->y + mmov_y];
+
+ from monstuff.cc around line 2730 is also causing an ASSERT failure.
+
+ GDL: in fact, there are a bunch of places in monstuff.cc where fleeing
+ or confused monsters can try to "run off the map", apart from the
+ 'good move' checking in bug 25 above.
+
+
+== 27. monsters equipped with missile weapons
+ commonly associated with launchers who
+ insist on tossing the missiles by hand.
+
+== 28.About line 909 of monstuff.cc is
+
+ if ( show[monster->x - you.x_pos + 6][monster->y - you.y_pos + 6] )
+
+ The electric eel is at (48,36), I'm at (55,32), so we're indexing (-1,10).
+ The array show is 19x19, and I'm thinking the +6 should be +9.
+
+ There's a similar construct for lava snakes a little further up.
+
+== 29. An indexing error in item_use.cc, line 3092 or so, after reading a scroll
+ of enchant armour while not wearing body armour.
+
+ you.inv_type[you.equip[EQ_BODY_ARMOUR]] is inspected even though
+ you.equip[EQ_BODY_ARMOUR] is -1.
+
+
+ do
+ {
+ affected = 1 + random2(6);
+ }
+ while ( you.equip[affected] == -1 );
+
+ // NOTE: It is assumed that armour which changes in this way
+ // does not change
+ // into a form of armour with a different evasion modifier.
+
+ if ( you.inv_type[you.equip[EQ_BODY_ARMOUR]] == ARM_DRAGON_HIDE
+ || you.inv_type[you.equip[EQ_BODY_ARMOUR]] == ARM_ICE_DRAGON_HIDE
+ .
+ .
+ .
+ )
+
+== 31. I just disarmed a blade trap, and the game seemed to hang.
+
+Since TRAP_BLADE are of type DNGN_TRAP_MECHANICAL, this code in misc.cc,
+line 1492 or so, tries to make a stack of trap items:
+
+ if ( trap_category(env.trap_type[i]) == DNGN_TRAP_MECHANICAL )
+ {
+ for (j = 0; j < 20; j++)
+ {
+ itrap(&beam[0], i); // places items (eg darts), which will automatically stack
+
+ if ( j > 10 && one_chance_in(3) )
+ break;
+ }
+ }
+
+But misc::itrap() doesn't create these blades, and instead:
+
+ default:
+ getch();
+ break;
+
+waits for input. It seems like a very strange default. Ultimately,
+you can wait it out by moving back and forth. Then you find a few
+questionable item where the trap was.
+
+== 32. Banishing self to Abyss when you are at Abyss does really
+ strange effects
+ ("The 0 hits you !" - I really don't understand why)
+ Propably it's connected with 0-beams problem -
+ some spells shows message "The 0 hits you !" when cast at player
+ I suggest some kind of check whenever is 0-beam casted (e.g. if
+ its targeted at player then shows message "It's not good idea."
+ or so)
+
+== 33. I don't know how it happened but I've found 2 off-screen corridors.
+ (Btw. I hopped it was fixed)
+- Finally, what you've all been waiting for: a fix for the
+infamous "corridor off the screen bug" (or at least one of its
+aspects). In dungeon.cc in vault_grid(...), add the line
+(vgrid == '\0') ? DNGN_ROCK_WALL :
+amongst all of the other ones. The problem was that the
+vault code was null-terminating some of the lines of the map,
+causing the default of DNGN_FLOOR to be put in place of all
+the '\0's.
+
+== 34. Potions, scrolls & wands are not updated when wielded and used.
+
+== 35. I've already reported this one but I remind that -
+ When zapping some bolt towards the top of the screen and
+ gaining level during it the rest of the bolt is drawn at the
+ bottom of the screen (at message lines)
+
+== 36. Missing space in message "<Servant>is recalled."
+ e.g. "Mummyis recalled."
+
+== 37. Redundant space in message "You are diseased."
+
+== 38. Why is "demon whip of flaming" white ? I've found such one.
+>> demon weapons are always given random colours.
+>> MV: Should not be fixed now.
+
+== 39. "Summon Daeva" spell summons Angel.
+ Why ? "Daeva" exists and it's possible
+ to summon it during summon_ice_beast_etc()
+
+== 40. At fight.cc::monster_die() is line
+ ( you.religion == GOD_VEHUMET
+ && (!player_under_penance()
+ && random2(you.piety) >= 20) )
+ There should be 30 and not 20, because piety equal to 30 is limit
+ for this ability (see religion.cc).
+
+== 41. It was mentioned already but -
+ Descriptive messages like
+ "It's lightly enchanted to do more damage."
+ can never appear because of badly placed brackets - {}
+ in describe.cc::describe_weapon()
+ Program gets on line
+ if ( item_dam >= NWPN_SINGING_SWORD )
+ and if this fails the programs continues on the line
+ int spec_ench = item_dam % 30;
+ and it means it can't get to messages about enchantment.
+
+ Or am I missing something ?
+
+== 42.In monstuff.cc::mons_speaks() is few times used sprintf() insteed
+ of strcat(), e.g.
+
+ sprintf(info, " %s \"Help!\"",
+ coinflip() ? "yells" : "wails");
+
+ Problem is that in the begining _info_ contains name of the monster
+ but sprintf() deletes it. It means that output is
+ e.g. " yells "Help!"" instead of "Sigmund yells "Help!""
+
+== 43. Which compile time options will be made standard? What are the the
+ appropriate defaults for the config file (set in initfile.cc)? These
+ have to be laid out before the release.
+
+SEPARATE_SELECTION_SCREENS_FOR_SUBSPECIES I vote no on this one. Could be made into an initfile or command
+ line option if people really want it, but there just aren't enough
+ subspecies to justify it.
+ALLOW_DRACONIAN_TYPE_SELECTION This one is typically considered "cheating". Part of the fun of
+ being draconian is finding out what you actually are.
+USE_ELVISH_GLAMOUR_ABILITY Haven't really tried out glamour. The grey elf or two I've played
+ that has had it has never really successfully used it.
+USE_BETTER_MINOR_MAGIC_BOOKS These should be okay now.
+USE_NEW_CLOUD_CODE This code is pretty cool, I sometimes wonder about potential
+ twinkiness at high levels with this in a corridor (where it
+ could fill quite a stretch reaching more than a half dozen
+ squares from the center of the effect in a single turn).
+ Maybe a safeguard should be added to keep the effect within
+ a certain radius from the target?
+USE_SILENCE_CODE I've never been overly fond of silence. I don't like the
+ way it cancels enemy priests and spellcasters.
+USE_HARDER_AC_RULES Things are more sane with is option, unless scaled demonspawn
+ transformers turn into scaly spiders.
+USE_NEW_ALTAR_CODE I liked things a bit more random. I once had orcish mines with
+ three Ely altars (which I thought was pretty interesting).
+ Modifying this code so there's at least a chance of an outside
+ altar would be nice.
+USE_NEW_MINIVAULTS These are probably okay.
+
+USE_GOD_COLOURS We do much worse than this right now with all the channels on.
+// > USE_GOD_COLOURS
+// Yes. Actually, this option should probably be either removed or replaced with
+a USE_MESSAGE_CHANNEL_COLOURS option or some such (gods are just part of
+this system now). Brings back to mind the possibility of specifying
+non-colour-based highlighting options like "stars", "capitalized",
+"indented", and such. Would have to switch from an enum to a bitfield,
+and the initfile parser would have to be adjusted, but other than that
+it would be simple to do.
+
+USE_OPTIONAL_WIZARD_DEATH Test option, don't need this.
+USE_LIGHTER_MAGIC_ITEMS These are reasonable.
+USE_NEW_TORMENT_CODE This is good.
+USE_SEMI_CONTROLLED_BLINK It's powerful, but as long as it needs the blink spell and
+ a separate form of teleport control it's probably okay.
+ As an all in one spell it's over powered (but that's only
+ in the code for wizard mode testing right now).
+USE_NEW_COMBAT_STATS Not sure these really have much of an effect on anyone's
+ game. Could be left out.
+USE_SPELLCASTER_AND_RANGER_WANDERER_TEMPLATES Not sure about the wanderers. The ranger and spellcaster templates
+ might just be encouraging people to try and re-roll for twinkiness.
+ Might be best with just the basic warrior wander type.
+USE_SKILL_POOL_DRAIN This one is pretty silly. There's no real reason to punish people
+ who get a large pool (mostly from killing a large monster or two).
+ To increase the cost because of that doesn't make much sense, and
+ the skill cost doesn't need to be made any tighter (it might even
+ be due for a bit of loosening).
+USE_NEW_RANDOM Should be default, the suggestion to reverse it into USE_OLD_RANDOM
+ is probably good.
+
+From Michal:
+> SEPARATE_SELECTION_SCREENS_FOR_SUBSPECIES
+No.
+> ALLOW_DRACONIAN_TYPE_SELECTION
+No.
+> USE_ELVISH_GLAMOUR_ABILITY
+Yes. Works fine.
+> USE_BETTER_MINOR_MAGIC_BOOKS
+Yes.
+> USE_NEW_CLOUD_CODE
+Yes.
+> USE_SILENCE_CODE
+> I've never been overly fond of silence. I don't like the
+> way it cancels enemy priests and spellcasters.
+I don't think so.I vote for this.
+
+> USE_HARDER_AC_RULES
+Yes.
+> USE_NEW_ALTAR_CODE
+> I liked things a bit more random. I once had orcish mines with
+> three Ely altars (which I thought was pretty interesting).
+> Modifying this code so there's at least a chance of an outside
+> altar would be nice.
+Agree
+> USE_NEW_MINIVAULTS
+Yes.
+> USE_GOD_COLOURS
+Yes.
+> USE_OPTIONAL_WIZARD_DEATH
+> Test option, don't need this.
+Of course no.
+> USE_LIGHTER_MAGIC_ITEMS
+Yes.
+> USE_NEW_TORMENT_CODE
+Yes.
+> USE_SEMI_CONTROLLED_BLINK
+Yes.
+> USE_NEW_COMBAT_STATS
+> Not sure these really have much of an effect on anyone's
+> game. Could be left out.
+I think this one is OK, I vote for.
+
+> USE_SPELLCASTER_AND_RANGER_WANDERER_TEMPLATES
+Yes.
+> USE_SKILL_POOL_DRAIN
+No.
+
+xx 44. might want to branch off a version of the source for the next release,
+ with the unused spells and code cut out (along with some of the
+ unimporant comments). The full code would naturally still be used
+ as the development code.
+
+** 45. documentation (crawl.txt, crawl.6 will probably need some changes)
+
+== 46. bow messages on skill screen might take up too much real estate
+ (things are already tight for people on 24 line terminals once they
+ get all the skills)
+
+== 47. very noisy gcc --Wall compile (it was bad before, I'm afraid I've
+ made it worse, it's hard to tell I get a lot of warnings from
+ curses that have to do with some unimportant system conflicts).
+
+Oh, in makefile.sol... one of the $(INCLUDES) is spelled INCLUDE
+
+== 48. giant spores sometimes seg fault when exploding (I added a simple check
+ for NULL, but that's probably not the problem)
+
+ ugly, ugly, ugly, ugly. But fixed. the problem was that spores
+ were kind of cleaned up before exploding (so that the death message
+ wouldn't come twice), but then they fell through to the "handle
+ special ability" case the next time through the "monster action" loop
+ and all hell broke loose.
+
+== 50. look into why you.equip[EQ_WEAPON] (aka weapon) is used in
+ fight.cc::monster_fight() and monster_attack() (ie. when the
+ player isn't even involved!)
+
+ > no effect in monster_attack()
+ > bizarre use in monster_fight() - the
+ attacking monster gets several attributes of the player's
+ weapon!!! This is clearly wrong.
+ > MSLOT_WEAPON was also used in a couple places where hand_use
+ was required.
+
+== 51. BUG: no "scores" file == segfault.
+
+> some pretty nasty bugs in the score file stuff. Cleaned up segfault
+> and some ranking bugs. Scores file is now proper text; Crawl can
+> still read old scores files. Scores of 0 no longer printed. No more
+> segfault on non-existent file.
+
+xx 52. 'X' (view map) causes core dumps on terminals larger than 64 lines?
+
+> could not repro on Win32. Tried 65 line terminal, 'X' look no problem.
+
+== 53. Anyway, up on onelist.com (or egroups.com, whatever)
+is an updated mon-spll.h file including the enums for
+MST_foo and a couple MS_foo that Brent had missed
+in the file ... note that the comments before these lines
+in mon-util.cc:
+
+static unsigned char mspell_list[][7] = {
+#include "mon-spll.h"
+};
+
+are duplicitous of those in mon-spll.h, and can probably
+be struck (or vice versa?) ... I had also thought that there
+was a MS_foo matching value 100 (the beastly equivalent
+of SPELL_NO_SPELL) ... maybe Gordon can add it in?
+clear application to mon-spll.h and monstuff::handle_spell().
+
+
+of course, one could go whole hog and add enum constants
+for the "slots" in the template (actually the position *less one*
+would be enummed, see handle_spell() and mons_spell_list()
+for details) ...
+
+
+these lines in monstuff::handle_spell() can be enummed
+with the appropriate MST_foo enum constants:
+
+int msecc = ((monster->type == MONS_HELLION) ? 30 :
+ (monster->type == MONS_PANDEMONIUM_DEMON) ? 119
+ : monster->number);
+
+[[ 30 == MST_BURNING_DEVIL, 119 == MST_GHOST ]]
+
+that 119 value also turns up in mon-until::mons_spell_list() ... but
+this gets into "overlap land" because these values are stored in the
+sec field of the monster struct, which stores a number of values
+unrelated to spell-casting (though I guess applying the template
+enum throughout the codebase is one way of sifting out when sec
+values are used for one purpose instead of another ...) *ANYWAY*
+
+== 54.In enum.h --
+
+/* these are for the player spell struct, we'll see what's what later
+*/
+
+#define SPELL_FOOD(x) (x)
+#define SPELL_MANA(x) (x)
+#define SPELL_LEVEL(x) (x)
+
+
+All of the above can be killed, as the macros are no longer used.
+
+The SPELL_EXCLUSION enumeration (right below the macro
+definitions) can also be killed, as I never implemented it, and in
+hindsight, if it is ever to be stuck back into the player spell
+data structures, there is a much better way of doing it. So, please
+yank these out, before someone gets hurt :P
+
+So, this bit in spl-util.cc can also be axed:
+
+/* //jmf: commented out; add field `restriction' to spell struct if desired
+ // (and if anyone finds a use for such a thing)
+ int spell_restriction( int which_spell, int which_restriction )
+ {
+ int this_restriction = (int) seekspell(which_spell)->restriction;
+ return ( this_restriction == which_restriction );
+ } // end spell_restriction()
+
+ */
+
+
+== 55. Minor typo:
+
+MST_RAKSHAKA
+
+should be
+
+MST_RAKSHASA
+
+so that it matches up with the monster's actual
+name throughout the codebase. Nothing major,
+but it will require fixing (present in enum.h and
+the enummed mon-spll.h I just uploaded).
+
+== 56. "* * * LOW HITPOINT WARNING * * *
+ You die..."
+
+ At that point, it's really too late. The warning perhaps
+ ought to occur at the beginning of the player's turn as
+ opposed to when the character takes damage.
+
+ I've also seen two warnings in one combat turn ... can't
+ remember if death accounted for one of them.
+
+> The problem is that the check is you.hp... it should be (you.hp > 0)...
+> I quick-fixed that one while I was trying to get the code out the
+> door and missed.
+
+== 57. Hunger messages don't seem to appear, even if their color is set.
+
+> Gave general cleanup of food.cc; merged hunger_warning and food_change.
+> removed unnecessary modification of hunger status from level save/load,
+> fixed up some logic problems.
+
+
+== 59. Lot's of the enums in enum.h have trailing commas, eg
+ enum CONFIRM_LEVEL
+ {
+ CONFIRM_NONE_EASY,
+ CONFIRM_SAFE_EASY,
+ CONFIRM_ALL_EASY,
+ };
+I don't think this is legal in ANSI C.
+
+> Borland C++ didn't complain with Wall, so it's not a problem.
+
+== 61. In libmac.cc there's a function called FlashButton. The line that calls
+HiliteControl should look like this:
+ HiliteControl(control, kControlEntireControl);
+
+== 62. In message.cc mpr's definition includes default arguments. This isn't
+legal C++ (only the declaration can have default arguments). The same
+applies to random_near_space and simple_monster_message in monstuff.cc,
+apply_random_around_player in spells4.cc, and yesno in stuff.cc.
+
+== 63. monspeak.cc needs to include monspeak.h at the top of the file, not
+monstuff.h.
+
+== 64. overmap.cc includes curses.h, this should be wrapped in #if !macintosh.
+
+> Acutally it should be wrapped if USE_CURSES is not defined. Which it is now.
+
+== 65. spl-util.cc should include the standard limits.h instead of the
+non-standard values.h and should use INT_MAX instead of MAXINT.
+
+== 66. The MacStuff directory should be deleted.
+
+== 67. Very Old Buglet:
+ Spider Form spell turns one into a black 's', which corresponds
+ in monsterland to a scorpion, while giving one all the features
+ of the noble wolf spider, represented by a brown 's'.
+
+== 68. It's really not that bad. Worse is the fact that I noticed that
+breathe fire gives a bonus if the player is transformed (doesn't
+matter what: Ice Beast, Blade Hands, or Dragon)... that's a bug.
+
+== 69. player.cc - If you look at line 2312 you'll see that
+ redraw_screen () is called. But it's problem under
+ DOS because redraw_screen() is defined only under
+ PLAIN_TERM.
+ See stuff.cc - there is
+ #ifdef PLAIN_TERM
+ void redraw_screen( void );
+
+> got rid of all of the plain_term() wrappers around redraw_screen.
+> instead, redraw_screen() becomes a no-op for non-plain term systems.
+> I hate seeing #defines all over (supposedly) non-system dependent code!!!
+
+== 70. view.cc - at two place there is
+
+ #ifdef DOS_TERM
+ puttext(2, 1, 34, 17, buffy);
+ #endif
+
+ Probably it's possible to compile that with some compilers
+ but not all and corretly it should be
+
+ #ifdef DOS_TERM
+ puttext(2, 1, 34, 17, buffy.buffer());
+ #endif
+
+== 71. When you cast "Twist" spell and choose direction you'll always get
+message
+"There is no monster there!"
+even if it's not true. If you want to hit monster you have to target
+monster by using "*" or "+". At least this spell shouldn't ask for
+direction but for target.
+
+xx 72. After battle with guardian naga character is told he is not carrying anything.
+
+> don't see how this could happen.. g. nagas can't affect player inventory.
+> must have hit a key that tried to use an inv type you didn't have, or num_inv_items
+> got out of whack.
+
+xx 73. Some initial prompts not prompt colour. I'll have to document which.
+
+== 74. Throwing anything left seems to cause a segfault and core file ... hmmm ...
+ item_use.cc, line 1294: DUMB BAD CODE! Throwing anything while weilding
+ nothing results in a crash. Clearly someone plays neither Transmuters nor
+ Monks. Clearly we need some function to safely get the current weapon.
+
+== 75. Throwing stuff while weak: I'm of the opinion that things thrown ought
+ to land at least next to the player, while currently, large things end
+ up at the player's feet. This annoys me - "I didn't say (d)rop, I said
+ (t)hrow!".
+
+> it's a playability issue, especially with large amounts of items and
+> autopickup. All thrown objects will go at least 1 square - we'll
+> consider a 'throw' of a very heavy object equivalent to 'shove' it. :)
+
+== 77. line 234 of mon-util.cc ought to be:
+ "if (mc == MONS_PLAYER_GHOST || mc == MONS_PANDEMONIUM_DEMON)"
+ but instead it's:
+ ""
+
+ This will fix the elemental damage problem I was complaining about --
+ clearly Linux does not automagically give clean pages.
+
+== 78. Remove trailing commas in enum.h
+
+== 79. Stores are still trying to sell me gold pieces, and at extortionary rates.
+
+== 81. + spells4.cc::418 assert failed: ASSERT( targs[i].x != 0 && targs[i].y != 0 );
+ should this be ( targs[i].x || targs[i].y ) ? (YES)
+
+== 82. if (mons_flag(monster->type, M_SPEAKS) && one_chance_in(21)
+ && !silenced(monster->x, monster->y))
+{
+ mons_speaks(monster); // mv: removed silence check
+}
+
+That check for silence shouldn't be there, because mons_speaks()
+handles silence by itself - see monspeak.cc (Btw. I've already removed
+this check when I wrote mons_speak(), but somebody have returned
+it back *grin* ).
+
+== 83. However, in a couple places in acr.cc, there is code like this:
+
+ if (grd[you.x_pos][you.y_pos] == DNGN_LAVA
+ || grd[you.x_pos][you.y_pos] == DNGN_DEEP_WATER)
+ {
+ if (you.species == SP_MERFOLK)
+ {
+ mpr("You dive into the water and return to your normal form.");
+ merfolk_start_swimming();
+ }
+
+ fall_into_a_pool(true, grd[you.x_pos][you.y_pos]);
+ }
+
+== 84. // From: Daniel Ligon <makmorn@qis.net>
+[easy_butcher]
+// When I see it happen, I have no weapon in hand and no weapon in the
+// "a" slot. After hitting "D" to Dissect, I am prompted for a weapon.
+// I can choose a cursed weapon of either known or unknown status and will
+// receive a message that the weapon sticks to my hand. In both cases,
+// I return to unarmed after butchering - and the weapon is now identified
+// as being cursed.
+
+Okay, then the problem isn't with the original check... all that
+needs to be done is make sure that is the target weapon (after the
+call to wield_weapon which does all the validating and prompting)
+isn't removed if it's cursed. Should be a fairly simple check,
+although it has to validate if a weapon is wield first (of course).
+
+== 85. This seems to be a new bug (can't see an obvious cause)...
+ Brain Worms seem to have a sticky flame attack now.
+
+> SOMETHING was(is?) setting mon->number to be equal to mon_type. This
+> was setting butterflies (MONS_BUTTERFLY == 66) to have a colour
+> of 66, and brain worms (MONS_BRAIN_WORM == 69) to have the
+> spell type of MST_MOTTLED_DRAGON (69). Why?? I don't know yet.
+
+>> turned out to be define_zombie. Random zombies were not getting
+>> zombified due to some parameters getting passed incorrectly from mons_place().
+>> all quasi-zombies were getting correct mons->number set but then mon->type
+>> was not being set.
+
+== 86. This appears in player.cc::player_hunger_rate()
+
+ // jmf: hunger isn't fair while you can't eat
+ // Actually, it is since you can detransform any time you like - bwr
+ if (you.attribute[ATTR_TRANSFORMATION] == TRAN_AIR)
+ return 0;
+
+Some testing reveals that in fact one cannot untransform ("You're too
+hungry.") nor even turn visible. If hunger was not meant to preclude
+these reversions, there's a bug in the ability code.
+
+ - Josh
+I would guess that there is a bug in the ability code wrt
+untransform - I have not looked at the code for this in a
+while, but the "untransform" ability is likely lumped with
+all other abilities in terms of forcing a check of one's
+current hunger level before proceeding further into checks
+and then (finally) triggering the ability.
+
+Trivial fix, that is where the bug is: the ability code (98%
+certain) - it does not make sense to attach a hunger cost
+to detransformation, unless you wanted to curse players
+first learning how to transform with costs on both ends
+(it takes effort to change shape, effort to change back).
+
+The latter model of double-ended costs associated with
+transformations make sense, but I do not believe this was
+the intended model in Crawl.
+
+xx 87. PS: I was looking through player.cc because a white imp "chilled" my
+ mummy assassin. Still looking for how that could happen.
+
+> everything seems to be WAD:
+> could have been wearing two rings of fire, or dragon armour, or had a
+> randart with cold susceptability. Mummy only gives resist, not immune.
+
+== 88. PPS: White imps seem to pick up darts & stuff, while red imps don't.
+ IMHO that's exactly backwards. White imps are have a much better
+ range attack than darts provide, while a dart-throwing red imp
+ would be a major pain.
+
+> actually the issue is gmon_use (the last parameter in mon-data.h)
+> - red imps have 1 (opens doors) while white imps have 3 (doors,
+> weapons & armour). sorry not explicit enough.
+
+>> No, make white_imp.gmon_res=1; red_imp.gmon_res=3. Current values
+>> but reversed.
+
+== 89. PPPS: Noticed punctuation creep: "You can't weild a two handed weapon
+ *AND* a shield at the same time." Patriots should conserve stars.
+
+== 90. The eat chunks on the ground prompt is uncoloured.
+Following prompts are coloured.
+
+== 91. Prompt & crashes: try doing an x-look while you
+can't see any monsters, then press '+'. You will
+get a nice, shiny new core file in your directory.
+
+The x-look prompt also claims to allow you to go
+to the current target using 'p', but does not. 'P'
+does nothing.
+
+== 92. Elves in their Halls seem to wear a lot of Orcish armour.
+
+== 93. > And finally to end on a good note...
+> I've love what has been done with the coloring, the autopickup and
+> the automatic door opening. This is *very* useful and as a user I
+> truly do appreciate the effort here. (It would still be nice to be
+> able to pick up gold when your slots are full but I'm not going to
+> complain.)
+
+Argh. I haven't checked the latest dev source (but I will
+this weekend), but is this still the case? If so, can Gordon
+please put it in the bug queue as something to fix for the
+upcoming release of 3.*cough* ???
+
+== 94.
+> I was descending through the Elven Halls, and reached level 6. On this
+> level were three stairwells down to level 7, and an entrance to the
+> Labyrinth.
+>
+> It is my habit to descend/ascend each stairwell as I find them, since
+> the dungeon areas of crawl are sometimes disconnected. So I believe
+> the three stairwells on this level actually did lead to level 7.
+>
+> After filling my gut on fresh elven meat, I descended in the Labyrinth,
+> spiraled in to the Minotaur, slew it, grabbed its stash, and ascended
+> back to the Elven Halls, appearing at one of the stairwells down.
+>
+> But now all three of the down stairwells on this level lead to the
+> Labyrinth rather than level 7, and the Labyrinth is being mapped.
+
+I can verify that I had visited Elven Halls level 7 (I had saved a
+copy of my player files before entering the Labyrinth). As it happens,
+level 7 was the bottom of the Elven Halls with the Vault.
+
+I cleaned out the Vault, then returned to the Labyrinth. Once again
+returning from the Labyrinth caused all the stairwells on level 6 to
+lead to a mappable Labyrinth.
+
+>> Fixed. up_stairs() was not correctly setting was_a_labyrinth in
+>> the call to load(), and so the labyrinth level would get saved
+>> _over_ the n+1 th 'real' level. REALLY BAD. Yuck. Bleah!
+
+== 95. Auto-butcher + Staff of Power + dagger in off slot.
+Every time a corpse is butchered max SP is reduced...
+
+This probably has to do with the fact that staves of power are one of
+the few things that are toggled on wield/unwield (a lot of the other
+properties are calculated as required).
+
+== 97. The routine mon-util::seekmonster() needs to check that
+>
+> mon_entry[(*p_monsterid)]
+>
+> is not -1 before returning
+>
+> &mondata[mon_entry[(*p_monsterid)]]
+>
+
+== 98. In my current game, I found an entrance to the Hall of Blades on
+> level 4 of the Vaults. I entered, killed a few weapons, and returned.
+> Upon returning, the game crashed. When I restarted, I was on level 1
+> of the Crypt. I exited the Crypt was back at the entrance I had found
+> on level 3 of the Vaults.
+>
+
+- Fix for the Hall of Blades staircase bug... Although the
+staircases leading out of the HoB are called staircases "back
+to the crypt", and although the enum for them describes them
+as returning to the crypt, and although climbing one of them
+sends you to the crypt, they are in fact supposed to lead back
+to the vaults, and the level range of the HoB has been set
+accordingly. To fix:
+ - Change the name of the enum DNGN_RETURN_CRYPT_II to
+ DNGN_RETURN_VAULTS_II (may need to be _II or _III)
+ - Change in direct.cc, in look_around(...), "A staircase
+ leading back to the crypt" to "A staircase leading back to
+ the vaults"
+ - Do the same in item.cc in item_check(), where it tells you
+ what you're standing on
+ - And, finally, in up_stairs() in misc.cc, the case for
+ DNGN_RETURN_VAULTS_II (or whatever it's changed to) needs to set
+ you.where_are_you to BRANCH_VAULTS.
+
+>> this code needs a complete overhaul to be more comprehensible,
+>> but I don't know if I'm up to it at the moment. :\
+
+== 99. There was lava in the Crypt. I don't object to it, but it seems a
+> little out of character, much like Josh's observation that elves wear
+> a lot of orcish armour.
+
+== 100. Characters who might go berserk while fighting, say from the mutation
+> or wielding a randart, can have go_berserk() called on them while they're
+> already berserk.
+
+>> which is fine. Fixed up berserk messages for all possible situations -
+>> no more double messages, or inappropriate ones.
+
+== 101. I've run across a couple Borises in my current game. It must be a
+> popular name among Liches.
+
+>> fixed. Bad range check in dungeon.cc.
+
+== 102. If a monster tries to mutate you and fails due to your resistance
+> to such, you get a message from mutate() - "You feel rather odd for a
+> moment." and from direct_effect() - "You feel very weird for a moment."
+
+>> fixed all manner of mutation messages.
+
+== 103. Removing a ring of strength causes these messages:
+>
+> You are being crushed by all of your possessions.
+> You possessions no longer seem quite so burdensome.
+>
+> since this happens in item_use::remove_ring():
+>
+> case RING_STRENGTH:
+> decrease_stats(STAT_STRENGTH, (you.inv_plus[ring_wear_2] % 100), true);
+> increase_stats(STAT_STRENGTH, 50, true);
+> break;
+>
+> The suppress_msg flag of decrease_stats and increase_stats does not get
+> passed to player::burden_change(), which has no arguments.
+>
+> It is interesting to compare that code with similar code to remove the
+> strength one gets from a randart ring. From it_use2::unuse_randart():
+>
+> const int str_plus = inv_randart_wpn_properties( unw, 0, RAP_STRENGTH );
+> if (str_plus != 0)
+> {
+> you.strength -= str_plus;
+> you.max_strength -= str_plus;
+> you.redraw_strength = 1;
+> }
+>
+
+== 104. There is a monster named "another lava thing". Not a bad name, but
+> it leads to "You kill the another lava thing!" messages. Perhaps a name
+> change to "mother of all lava things" or "lava thing's cousin".
+
+> "another lava thing" has no stats in mon-data.h, so it was
+> obviously a dummy placeholder and has been removed from possible
+> generation lists.
+
+== 105. Assorted typos:
+>
+> You possessions no longer seem quite so burdensome.
+> You heara loud "Zot"!
+>
+> File name: Minh.txt
+> File name: Minh.txted successfully.
+
+== 106. Something causes misformatting of the descriptions for
+> SPELL_APPORTATION and RING_TELEPORT_CONTROL;
+
+== 107. After I picked something up, I could drop one thing, but nothing after
+// that. I think we ought to have periodic checks that num_inv_items is
+// correct - recounting once per turn is not a significant calculation.
+
+Ah! There's the problem... that variable was deprecated a while back
+and replaced with explicit code in the standard places (because it
+was impossible to keep it up to date). If someone is actually making
+use of it again then of course the entire system is going to break
+down.
+
+>> really deprecated this time.
+
+== 108. Fixed apply_area_within_radius(). Makes far fewer unnecessary calculations
+ now.
+
+== 109. Fixed rendering slowdown on windows console.
+
+== 110. Scorefile reading doesn't pick up special characters like a-umlaut or e-ague
+
+== 111. I was in the Tomb, slaying mummies with style and grace, so naturally
+a fair amount of cursing of my stuff took place.
+
+The Ring of Shadows now has an inv_plus of 100, I assume since
+monstuff::curse_an_item() adds 100 to inv_plus. I can't remove it,
+since inv_plus > 80. It is not labeled as cursed and scrolls of remove
+curse are ineffective since inv_plus < 130. I suggest that, for now,
+curse_an_item() should leave randarts alone.
+
+As an aside, is "artefact" a valid variant spelling of "artifact"?
+
+
+== 112. Another result of the great Mummy slaying was that my flesh would
+rot away. I think display_char_status() should list this.
+
+
+xx 113. I came a across a butterfly which had color 66. I could not
+determine why (N.B. 66 is MONS_BUTTERFLY.. what's going on?!)
+
+> me neither. All calls to create butterflies should go through
+> define_monster(), which sets m->number to 0..15. See #85.
+
+== 114. in view.cc, inside the #ifdef DOS_TERM things there are some
+bad things happening to the puttext calls. buffer.buffer()
+should be replaced with buffer, and buffer2.buffer() (or is it
+buffer.buffer2()? I forget) should be replaced with buffer2.
+Otherwise it refuses to compile (this may be an incompatibility
+between borland C++ and djgpp, Gordon)
+
+MV: Buffer.buffer() should be only buffer. Problem is with _buffy_ which
+needs to be _buffy.buffer()_.
+
+== 115. Also in view.cc in noisy() at 1304 the distance function is
+being used wrongly. Change if (dist <= distance(... to
+if (dist >= distance(.... This problem caused most monsters on
+a level to wake up as soon as a noise was made, and was why
+characters were getting mobbed.
+
+== 116. the init file is broken, at least under DOS. It is reading
+in the player's name okay and is finding the other options,
+but when read_bool() tries to work out whether an option is
+followed by "true"/"1" or "false"/"0" it fails to detect
+anything and just goes with the default. I don't know how any
+of the weird code in initfile.cc works (what was wrong with
+the stdlib string functions?) but, at a guess, this might
+have to do with the way DOS writes End Of Line in its text
+files - if a line is concluded by something other than
+'\0' the string code might fail. But that's just a guess.
+
+>> made a couple changes and it seems to work fine on win32..
+>> but this is highly dependent on the compiler's implementation
+>> of the standard string template (grrr!)
+
+== 117. A blank/empty scorefile will not be updated; scores of 0 not kept.
+
+> both fixed.
+
+== 118. If you aren't carrying anything except money, you can't drop it (money)
+
+> can now specify quantity of money to drop. Accepts any value.
+
+== 119. My character entered the Tomb, arriving in the upper left hand corner,
+at position (9,7). I tried to target, and failed the ASSERT for the
+mgrd array. This took place around line 1227 of direct.cc in the
+mons_find() routine. const int targ_x = you.x_pos + temp_xps - 17;
+ const int targ_y = you.y_pos + temp_yps - 9;
+ const int targ_mon = mgrd[ targ_x ][ targ_y ];
+
+In this case, you.y_pos is 7, temp_yps is 1, and so targ_y is -1.
+
+== 120. The Amulet of Cekugob does not stop one from teleporting when one
+ has the teleport mutation.
+
+== 121. I entered Hell from level 22. When I exited Hell I was placed on
+ dungeon level 27.
+
+BWR:I believe this was the better alternative of earlier problems dealing
+with returning to the main dungeon... used to be you could end up on
+level zero, or on a semi-random level inside solid rock. After those
+problems were fixed the portals seemed to work as above.
+
+== 122. When I returned to Hell, I was placed on one of the down stairwells.
+
+== 123. Remove which piece of jewellery?
+ That isn't a piece of jewellry.
+
+Webster has jewelry, jeweled. Changed all occurances.
+
+
+== 124. Oops, that ring feels deathly cold.
+ B - a cursed amulet of the gourmand (around neck)
+
+xx 126. I hit a giant spore with a bolt of poison flame, and the critter
+> didn't explode. It just disappeared.
+
+LRH writes:
+Not sure exactly, but I'm pretty sure that if you do enough
+damage to a spore with a single attack it will fail to explode.
+The relevant code should be in monster_die().
+
+== 127. A fire giant hit my Spriggan (AC: 5, EV: 13) with several fire balls
+> over a few turns, but none hurt much. I didn't get any messages about
+> resisting the effects. Is this the odd fire resistance problem?
+
+>> monster fireball damage wasn't being set correctly.
+
+== 128. The Spriggan has strength 10 and dexterity 21. When he wields a bow
+> or crossbow, I get the message:
+>
+> Your relatively low strength is limiting your use of this weapon.
+>
+> I don't think strength has any effect with crossbow, and probably doesn't
+> effect bows.
+
+BWR: As a side note, is the low Throwing skill message still on the skills
+screen? Has anybody tested it with all the skills yet (there is a
+lack of room, and the screen should fit in 24 lines). Maybe that
+message would be better as a message when wielding the bow itself,
+although I'm not sure how much the mechanic is required (I typically
+upped Throwing skill along with Bows because it's a cheaper and faster
+way to up accuracy and damage than raising Bows alone).
+
+== 129. The file makefile.obj seems to be missing... this is a problem
+ for most of the other makefiles which include it.
+
+== 130. The APPNAME in makefile.sol should probably be changed back to crawl.
+
+== 132. In spells0.cc should be also included stdio.h under DOS
+because sprintf() is used.
+
+xx 133. > Are you going to do the player-ghost/demonlord "structure" as well?
+//
+ Um, dare I ask, why? I've never looked at this part of the code.
+BWR:
+It's currently an array of chars. It would probably be easier to
+understand as a struct with fields for AC, max HP, spells, resistances
+and such.
+
+== 134. When I cast Static Discharge, I get occasional fails of the ASSERT
+on line 419 of spells4.cc: for (int i = 0; i < targs_found; i++)
+ {
+ ASSERT( targs[i].x && targs[i].y );
+ func( targs[i].x, targs[i].y, divided_power, 0 );
+ }
+
+> Fixed. Brent's algorithm is sound, but his coding wasn't. :P
+
+== 135. When I use the Sif Muna granted ability of Selective Amnesia, I hit
+an array bounds assert in seekspell() - which is exactly:
+
+return &spelldata[plyrspell_list[spell]];
+
+The value of spell is 210 (SPELL_NO_SPELL), and so plyrspell_list[]
+goes out of bounds (it is not protected by the Fix[Ary|Vec] stuff)
+which then triggers spelldata[] going out of bounds.
+
+>> plyrspell_list[xx] being set to SPELL_NO_SPELL _before_ call
+>> to spell_power. stupid logic error.
+
+== 136. I swung my Staff of Air:
+
+You miss the imp.
+You miss the imp.the imp is jolted.
+You are wielding a staff of air.
+
+== 137. I'm wearing an amulet of the gourmand, but I never seem to get labelled
+as being Full (or Engorged).
+
+>> is this a problem? Gourmand allows you to eat rotten/contaminated flesh,
+>> how could this be related?
+
+== 138. Trolls can eat huge amount of chunks of flesh without becoming full
+
+> oops. Nobody could ever get full. Stupid logic error.
+
+== 139. Name in INI file causes crash unless all caps.
+
+xx 140. Non-Beams displayed one cell at a time (thanks to Michal)
+
+== 141. M_SPELLCASTER removed from ball lightning.
+
+== 142. All beams/missiles leave a visible trail now (at least until window
+ redraw). Was too hard to get right w.r.t. killed creatures and cloud
+ trails, and most liked it the other way anyways.
+
+== 143. Some enchantment beam behavior fixed.
+
+== 144. Update & examine command-line switches & options
+
+// - update & verify behavior of command line switches & options
+Monochrome isn't connected to anything. The "no colour" option could
+be handled by imposing a set of colour macros (if they were made widely
+available)... most monochrome systems can do bold/standout, although
+that typically ends up backwards or ugly (if it's done via reverse).
+Could possibly just be removed rather than bother with it.
+The "-nb" (no black) option is obsolete with colour macroing.
+Basic options to consider:
+- list scores (param for top X)
+- select race/class
+- character name (for loading and starting new character)
+- pointer to game directory (ala crawl_dir option)
+- pointer to initfile (ala CRAWL_RC environment variable)
+Later things can get fancy, but we should at least have those.
+
+xx 145. I'm playing the latest win32 binary pre-release (January 11).
+The first problem is that I can't get to the religion screen. To produce
+'^' with my keyboard I have to press <Shift> + <the button with ^>
+followed by a space. However, in Crawl this doesn't work (it used to work
+with earlier versions before this series of win32 binary pre-releases).
+All I get is 'Unknown command'.
+
+== 146. When zapping a wand of Draining at a line of Kobolds and Big Kobolds,
+: the game froze if something was killed. The game was recoverable, and
+: the bug repeated itself. Killing these by hand caused no problems.
+: Using this wand on other creatures caused no problems.
+
+>> probably related to double-whammy monsters were suffering from poison/
+>> draining. Hit dice might have gone below zero, etc.
+
+== 147. Any ranged attack that hits you has a chance of destroying
+: your scrolls, not just fire-based ones, and they all give the message
+: that your scroll has burst into flames. Confused the heck outta me
+: the first time it happened. "The puff of frost hits you! One of your
+: scrolls bursts into flames!"
+
+== 148.
+: 1 other thing I just thought of. When targetting in version 3.43
+: you could use the dot on the keypad to select the target. Now, to
+: use that dot, I have to use the shift button with it.
+
+xx 149. Also it seems like mummies have lost some of their cold resistance... I
+had trouble with an ice dragon that should probably have been real easy...
+on the other hand fire damage does not seem to be all that nasty to them
+anymore (I dunno about the mummy monster but this seems to be the case for
+mummy player chars, none of my equipment provided fire resistance).
+
+== 150. Fixed new description() problem. Oops.
+
+== 151. Changed some messages for burning and chilling monster attacks.
+ note that mummies _could_ be chilled by melee attacks - "chilled" in fact
+ means that the player resists cold. New messages are tied to actual
+ extra damage from fire/cold.
+
+== 152. Fixed "always poison/drain" on beams/bolts that didn't actually
+ hit (problem with side effects in check_mons_resists() ->
+ mons_adjust_flavoured())
+
+xx 153. The level files for my characters don't seem to get deleted, even after
+the character dies. I'm assuming that they're meant to be deleted, as
+they used to be... or is there some reason that the game now keeps them?
+
+> can't repro - works fine on 2000.
+
+== 154. I found one of those checkerboard-like rooms with alternating wall and
+floor squares (you know what I mean? The ones where you can only move
+diagonally, sort of like the Hive, but occuring in the regular
+dungeon?)... it was made of metal walls, and had a small open area in the
+middle. There were some items which seem like they should have been
+placed inside the open area, but were inside the walls instead, and
+therefore inaccessible. I can't figure out how to get Crawl to dump a
+screenshot, but I'll recreate it here, using X to represent a wall.
+.X.XXXX
+X.X.[.X
+.X.X@)X
+X.XX!.X
+.X..XXX
+X...X.X
+.X.X'X.
+All three of the items around my character are inside walls; examining
+them says:
+You see a [item name] here.
+A metal wall.
+You can't move on to them or anything. Note that if you shifted them all
+three squares down and two to the left, they'd fit nicely in that little
+open area, which leads me to suspect that possibly that's where they were
+meant to be.
+
+>> several places in dungeon.cc where this could happen. Think I've squished
+>> them.
+
+== 155. I'd suggest killing /unused, but only after moving oldmaps.txt
+into /misc. Within /misc, scoretab.cc should probably be updated
+to the new scorefile format (or killed) and untab.pl should be
+killed, as it is an unreliable detab script - rh.bat seems
+near useless.
+
+In /Docs (why is this uppercase?), NEW.txt is empty, buglist.txt
+should be updated to the current status (about which, Gordon only
+knows), I need to migrate messlog into changes.340, changes.340
+needs to be renamed changes.400, the remaining files need to be
+updated.
+
+The old LOS code can die, I think I lost my fascination with it.
+I don't believe anyone else was defending its existence.
+
+== 156. On this topic, I get tons of warnings about FixVec.h and FixAry.h
+not having a final newline.   Could you add one to these?
+
+== 157. The compiler also noted a problem in dungeon.cc:
+ if (you.where_are_you == BRANCH_CRYPT || you.where_are_you == BRANCH_TOMB)
+ {
+ if (type_floor == DNGN_LAVA)
+ type_floor = DNGN_SHALLOW_WATER;
+ if (type_2 == DNGN_LAVA)
+ type_2 == DNGN_SHALLOW_WATER;
+ }
+The last statement should probably be an assignment.
+
+== 158. Finally, I can't compile dungeon.cc at all:
+dungeon.cc: In function `void link_items ()':
+dungeon.cc:6395: warning: comparison between signed and unsigned integer expressions
+FixVec.h: In method `FixedVector<TYPE, SIZE>::FixedVector (TYPE, TYPE, ...)
+[with TYPE = char, int SIZE = 7]':
+dungeon.cc:7998:   instantiated from here FixVec.h:125: `char' is promoted to `int'
+when passed through `...' FixVec.h:125: (so you should pass `int' not `char' to `va_arg')
+
+This also affects spells4.cc (instantiated from line 729).
+
+== 159. Problems with print_description() under DOS?
+Stupid, stupid, stupid.. good god. used .data() instead of .c_str()
+
+== 160. Make Boris back into a non-Unique and give him appropriate mons_speak()
+
+== 161. More portable savefile format.
+
+== 162. Well, played with the new pre release, speed is the same (drat) and the
+ghoul food bug still exists... the one where they have to eat a meat
+ration to cure the 'hungry' status. Haven't hit on any other bugs yet but
+I've only run 3 characters who all had very short lives.
+
+== 164. Direct-effect monster castings (smiting, etc) would crash the
+game (forgot to set beam_source for non-beam type attacks).
+
+== 165. The warning messages given for wielding objects should also be given
+at the start of the game (if applicable).
+
+== 166. Anyways, I'm starting to
+think that the margin should be a little smaller, the 79 colomn one is
+just too wide to read comfortably... a 70 column one should be fine.
+
+== 167.
+// > All staves work like this - the special power can activate even if
+// > you miss your foe by a mile.
+// >
+// > Is this desired behavior?
+//
+// I would think not.
+
+** 168. Enable loading of 3.30/1.x chars & level files.
+
+== 169. When casting Corona and hitting somebody I'm allways getting
+additional message "Nothing appears to happen.".
+eg. The goblin is outlined in light.
+ Nothing appears to happen.
+
+ (silly logic problem)
+
+== 170. In ouch.cc is under DOS missing #include <file.h>
+
+== 171. There is still small problem with new print_description().
+ Description window for DOS is (25,1,80,25) - see for example
+ describe_spell(). It means that lineWidth in print_description()
+ can't be 70 under DOS_TERM and should be 54 or so (of course
+ those windows can be changed but it's much more work).
+ DOS term and shoul be 54.
+
+== 172. I started a grey elf wizard and it begins play with an orcish robe, not an
+elven one. (flimsy coding)
+
+== 173.
+"You miss the ice beast.
+The ice beast hits you!
+The ice beastchills you.
+Ouch! That really hurt!"
+
+== 174. tag.h and monstuff.cc need final newlines
+
+== 175. tags.cc and files.cc include mem.h, but gcc doesn't come with one.
+ The routine memcpy is declared in string.h, which is already included
+ in these files, so commenting out worked for me.
+
+== 176. spells3.cc has the same problem with FixVec.h that dungeon.cc had
+ in pr6.
+
+I guess around line 729 or so. :) g++ -Wall -DLINUX -g -DDEBUG -c spells3.cc
+FixVec.h: In method `FixedVector<TYPE, SIZE>::FixedVector (TYPE, TYPE, ...)
+[with TYPE = unsigned char, int SIZE = 7]':
+spells3.cc:729: instantiated from here
+FixVec.h:125: `unsigned char' is promoted to `int' when passed through `...'
+FixVec.h:125: (so you should pass `int' not `unsigned char' to `va_arg')
+
+== 177. Was just looking at that code, and noticed the comment about the
+"other five gods" (the one's the player cannot start the game
+worshipping). Anyways, that comment was added there before the
+always_greet option, which does meet the requirement for filling
+in the extra gods (since the real purpose of always_greet is to
+remind the player of some non-obvious details about their character
+in case they haven't been playing in a while (ie. race, class, deity,
+weapon penalty).
+
+== 178. Could you please put the string "-O2 -fno-strength-reduce" in your makefiles
+dealing with GCC? It'll speed up the game by a *huge* amount. (The
+-fno-strength-reduce is to get around a bug in many versions of GCC.)
+Because of the exceeding slowness in the released versions, I compiled my own
+version, which leads to point
+
+== 179. Why in the name of Cthulu did you remove "#include <files.h>" from ouch.cc?
+To misquote Rufus Wainwright, "Cause all I get is instant errors/Instant errors
+Instant errors".
+
+== 180. Update scorefile format to a delimited ACSII numeric representation.
+ (hmmm - will take some thought)
+
+xx 181. I am not sure if its a bug or not, but using pr7 on NT4, every now and
+again when I die, Crawl causes a general protection fault (or whatever its
+called in NT) and the game crashes. The good side to this is I don't lose
+my character and can go back to my last save and keep playing.
+
+> When I'm having a good character going ("good" being
+> 1000+ points or so), the game tends to crash when the character dies.
+
+== 182. I just got the mutation "you can exhale a cloud of poison" but I recieved
+no special ability to activate it. At the time of the mutation, I was
+wearing a ring of shadows that gave me the ability to turn invisible.
+Perhaps the ring interfered with it? Hope this helps.
+
+> data error in mutation.cc. Fixed. Nagas now get breathe poison
+> sometimes if they _would_ have got the spit poison mutation.
+
+jmf> That mutation ought only occur for Nagas. A non-Naga getting
+jmf> the mutation is a bug.
+
+xx 183. Move rand(), random(), srand(), srandom() to libxxx
+
+> behavior is too complicated..
+
+
+
+== 184. Files are not cleaned up in DOS - see end_game() in ouch.cc
+
+== 185. Fixed more monster spell crashing-if-kills-player problems.
+
+== 186. Quokkas have no mass, hence they never leave corpses.
+
+> That was there original stat, should probably be set to 200.
+
+== 187. I found lots of bug while using 'recall undead slave' skill.
+
+I noticed this bug as well. Seems the recall spell places your servants in
+spaces next to you, regardless if there is already something there or not.
+In effect, monsters which are stacked seem unable to move, including
+hostile monsters. When the top monster leaves the space the game places a
+"floor" tile there.
+
+> really, really dumb logic error - corrupted mgrd as a side effect!!
+
+== 188. Several piles of gold on the same spot should merge
+
+>> so should other things. Fixed item_place() and drop_gold() appropriately.
+
+== 189. Merfolk hunters not available, NEWGAME.CC suggests they should
+
+== 190. Weld potion drank should dissappear from the screen
+
+== 191. First the bug: While in the Abyss, I came across an orange 8. Hit x and positioned
+the cursor over it to see what it was (thinking it was probably a type
+of golem I'd never seen or something) and it said:
+
+>> There was a tiny bit of overlap between the area which got nuked and
+>> the area that got transferred. Probably left pointers to invalid
+>> items lying around, which would produce exactly this:
+
+!questionable item (c100, +0, p50, p(2)50, d0:q0)
+
+== 192. Now the complaint: Because you can use the letter keys to move around,
+the numeric pad
+has obviously been modified so that the numbers map on to the letter
+keys... but there is a problem with this, namely that 7 maps on to y,
+and can therefore be used to answer in the affirmative to a question.
+I now realize why easy_confirm exists, since some people no doubt use
+the letter keys to move and may accidentally say yes to something they
+didn't intend to... but for those of us who use the numeric pad, the
+option doesn't seem to make much sense, since your finger doesn't come
+near the 'y' key all that often, so I just had it set to all. Then I
+was in a situation with one of my best characters ever where there was
+lava directly north of me and I wanted to move northwest, but my
+finger hit directly between the two keys, basically hitting 8 then 7
+in rapid succession, plunging me into the lava and killing me. I
+suggest one of two things; either make the numeric pad work the same
+way as the letters ONLY for movement, since the only time other than
+movement when you're going to receive input from the numeric pad is
+when it's accidental, or at least put a warning in the init.txt where
+it talks about easy_confirm saying something like "WARNING TO KEYPAD
+USERS: The number 7 is mapped on to the letter 'y,' which can result
+in accidentally answering yes to questions; it is suggested that you
+leave easy_confirm off."
+
+== 193. > An orc priest who hellfired him.
+
+>> fixed in general non-tracer spell cleanup. Oops.
+
+== 194. Scrolls of immolation don't do anything. The big fireball
+: appears on the screen, centred on you, but it doesn't damage you or
+: any of the creatures surrounding you, and doesn't have any other
+: effects. I'm assuming that this is a bug.
+
+> Good catch. Direct explosions were being treated as tracers. :P
+
+== 195. A more minor bug: if you read a scroll of teleportation, then
+: start butchering a corpse, you'll continue to butcher the corpse even
+: after you've teleported, successfully chopping it to pieces, even
+: though it hasn't come with you.
+
+== 196. Well, the title says it all, but, when I reach level 27 of the dungeon the game
+crashes (not a windows page fault, a 'dos page fault'). The character has not
+retrieved any of the runes of zot yet, so I figure I'll try again after getting
+one (or if that don't cure it 3 just in case). I'm on a windows 98 computer
+running the DOS compilation of pre release 7. I also had a few times on level
+26 where I couldn't move (alt tabbing out and forcing the game closed worked
+but I was set back a ways... so I made it a point to level level 26 hehe). One
+other thing I noticed was the dungeon clean up never happened (on level 25 but
+I had no problems on that level even after the floor was full). New monsters
+seemed to get weapons and armor but no more corpses once the floor was full.
+
+Something else I've always wondered about was the slime pits, are you supposed
+to get a rune of zot out of there or does the royal jelly 'eat' it or
+something, I've never gotten anything from there but it seems like it's the
+kind of place that would have one (specially with a monster that is no where
+else in the game sitting in a pre-fab dungeon).
+
+ ...and then this follow-up on Feb 9th...
+ I mention the runes because it was level 27 I was trying to enter when it
+crashed on me, I wasn't actually entering zot, just the level with all the
+gateways to zot. Was just trying to go down there to get a little more exp
+before I went to get the runes necessary to get into zot (the advantage of
+being a mummy... you can go do things in squirly order according to whim hehe
+
+mannix writes:
+
+Just confirmed it, lvl 27 is definitely a gaurenteed crash, even with 3
+(well, 4... got two in pandemonium... should that have been possible?) I
+still crashed when I tried to enter lvl 27. On the other hand I've found
+some fairly nifty places to explore for exp :). Another problem I found
+was that in a lot of areas the dungeon clean up is not nearly aggressive
+enough, I'd go so far as to say that when it happens all non-quest items
+should probably be removed, in some areas after spending a bit of time
+repeatedly killing random monsters (the joys of playing a mummy hehe) item
+drops would show up something like 'item 923589237 has dropped' (and
+that's a sure sign of impending doom, or at least a lock up on exit). I
+worked around the problem on one level by using my own clean up method...
+summoning imps/demons... some of them will pick up weapons (and in places
+like hall of blades that's all you'll normally see) and when they
+dissappear those items are gone for good.
+
+== 197. : Using a spell staff of smiting in melee combat reveals the following message:
+: You're wielding some sort of staff I've never heard of. (fight.cc)
+
+== 198. Trying to cast Apportation on a pile of gold crashes the game
+ (division by zero)
+
+== 199. Draconian Hunters start with a club instead of a bow.
+
+> It's a little bit worse than that... The bow is clobbered into being
+> a club instead of the leather armour being turned into a robe (draconians
+> shouldn't being wearing leather armour since it doesn't fit).
+
+== 200. Need more aggressive item cleanup.
+
+>> perhaps trigger this on item creation, if a spot can't be found.. go
+>> through the item list destroying less valuable items or small piles of
+>> gold.
+
+== 201. Teleporting a fish (by hitting it with weapon of distortion) might
+cause misc. problems - e.g. fish is teleported again and again
+(because it lands on the floor)
+
+> won't happen; checked & rewrote bits of monster_teleport() to be
+> more readable, but the code was fine.
+
+== 202. I was getting mutations after wielding/unwielding weapon of
+distortion
+
+> yes, it's in the code. Nice eh?
+
+== 203.Darts of bugginess found in shop
+
+> dumb logic in dungeon.cc::items()
+
+xx 204. Electric eels sometimes shoots lightning to strange (probably
+random) places and not at player.
+
+> don't see how.
+
+== 205. Put in a fix for scorefile lines longer than 80 chars (will break)
+
+== 206. a new score at the bottom of the list would not be added.
+
+== 207. Misc documentation changes from Don
+
+== 208. Won't get "Sorry, you can't target what you can't see." when you're
+just looking around.(with 'x')
+
+== 209. Improved 'C' command (gives XP left to go)
+
+== 210. Far strike & twist could not target with direction keys (they are
+pseudo-direct effects, which screwed stuff up. Argh!). Changed mode
+for those spells to DIR_TARGET, which means hitting a direction key will
+take player into targetting mode. No doubt will be hearing gripes about
+this too.
+
+== 211. Patched up multiuser compile.
+
+== 212. Quokkas don't generate corpses now. Someone else wants to revamp
+the corpse system, go for it.
+
+== 213. Easy butcher defaults to false now.
+
+== 214. Options for Race & Class added to init file
+
+== 215. Replace mutate() calls for miscast effects with addition to mutagenic
+radiation; perhaps all miscasts (may) add to this, and high level miscasts
+changed to give_bad_mutation?
+
+>> done. all spell miscasts give small mutagens; high level spell miscasts
+>> can get pretty nasty too, but still only small chances of mutation unless
+>> you're also invisible/hasted/wielding nasty artifact.
+>> missing a couple high level spells badly in quick succession can be really
+>> nasty. I'll leave it as an easter egg. :)
+
+== 216. Monsters won't throw stuff if they can melee.
+
+== 218. Misc stylistic & code fixes from Jesse
+
+== 219. Charmed monsters will no longer be described as 'friendly'.
+
+== 220. Brave attempt made to use correct pronouns (introduced mons_pronoun)
+
+== 221. Shop names more visible when looking around & moving
+
+== 222. Can now pickup auto-combine items even with full pack
+
+== 223. scrolls of fear won't auto-identify if nobody is scared by them.
+
+== 224. "Killed by giant ant" when smitten from afar by Orc priest?
+
+> very subtle. Death_source can be zero, since it is an index into
+> the monster array. But I didn't think it could be - if killed by
+> monster#0, scores like this would be generated:
+:4:0:89:Methea:0:6:3::3:14:3:0:0:0::2:0:0:0:0:
+> which would be translated to "killed by a giant ant"
+
+== 225. Don't generate monsters in LOS?
+
+== 226. Get name after race & class (pretty easy now)
+
+== 227. Fixed up some job titles.
+
+xx 228. Game crash on character death; after equip list, but before hiscore list
+
+== 229. Massive speedup on win95/98. Fixed all cursor dance and buffering
+problems. Fullscreen is still pokey on most machines, but it's finally
+playable.
+
+== 230. No staircases to Zot on level 27 (dlevel == 26). It looks like a
+ piece of code in dungeon.cc::builder() may be changing stairways to Zot
+ to dungeon floors, regardless of level (occurs after place_branch_
+ entrances())
+
+== 231. crawl -plain now actually uses non-gfx character set
+
+== 232. All female uniques are now properly gendered (missing break statement)
+
+== 233. Divine resistance messaged a bit better (w.r.t. Xom, Makhleb)
+
+== 234. messaging for vampiric attacks fixed up.
+
+== 235. Monsters generated on teleport traps will have unobtainable loot!
+ > shouldn't generate them on tport traps any more.
+
+== 236. Fixed DOS include of <files.h>
+
+== 237. Fixed overly long string in '?' screen
+
+== 238. More multiuser fixups. Changed default makefile to linux.
+
+== 239. Moved god favor messages more in line with prayer messages (too confusing
+ otherwise). Fixed a couple grammatical errors.
+
+== 240. Can't hit some monsters in LOS (rounding problem?)
+ Need to rewrite for integer math. :P
+
+== 241. Crash on long player names (duh!)
+
+== 242. Miscellaneous spelling/grammatical errors
+
+== 243. Do something about this: probably remove from compile options. But leave
+ bow/throwing warning in, as it is a _very_ important penalty.
+
+ : One odd thing, though. I chose a Human Fighter with a short sword and when
+ : I began the game I get "Your relatively low dexterity is limiting your use
+ : of your weapon." Other than the three occurrences of "your" in this
+ : sentence, I find it odd that 10 dexterity is too low to wield a short
+ : sword. Or is this a bug?
+
+ "Your relatively low <foo> is limiting use of your <weapon name>."
+
+ Would be a slight alteration to kill one "your" and actually
+ designate the weapon being affected (I know it is pretty clear
+ that the only weapon affected is the one wielded, but I like
+ some things spelled out).
+
+ To avoid those excessively long weapon names with all the plusses
+ and things, the weapon name string should probably be just the base
+ weapon type (e.g., "short sword" instead of "+1, +2 short sword of
+ orc-slaying and back-scratching"). As the str/dex modifiers are
+ based on the base type and not all that other goodness, this seems
+ an ok thing to do.
+
+ Anyway ... I still think that this check ought to be performed
+ prior to weapon selection by a player at start-up, so that he
+ or she knows his/her character will be handicapped by the choice
+ of one weapon type or another. I think that thread was raised
+ briefly last week or so.
+
+== 244. The game crashes when I start a monk.
+
+ In skills2::wield_warning(), these two statements need to be swapped:
+
+ int wepType = you.inv_type[you.equip[EQ_WEAPON]];
+
+ // early out - no weapon
+ if (you.equip[EQ_WEAPON] == -1)
+ return;
+
+
+== 246. Rewrote monster behavior routines.
+
+== 247. Cleaned up some function prototypes in dungeon.cc
+
+== 249. Put gendering into monspeak.cc
+
+>> couldn't find anything.. wonder what Michal meant?
+
+== 250. More typos
+
+== 251. remove caps from filenames
+
+== 252. Summoned critter problems:
+From: "Ben Goetter" <goetter@m...>
+Sent: Thursday, March 15, 2001 9:45 PM
+Subject: Crawl 4.0pr10z 13 Mar report Bug report: summoned creatures are
+appearing in the same space as the
+caster. (Cast spell, summoned creature not visible; move one space,
+creature appears in space vacated by caster.)
+<FIXED>
+Date: Fri, 16 Mar 2001 09:00:41 PST
+From: tgord <clubs-mail@y...>
+Subject: Re: Crawl 4.00 pr10zf [Yahoo! Clubs: Linley's Dungeon Crawl]
+I've noticed that summoned monsters sometimes appear on the other sides of
+walls now. ^^^^^^^^^^^
+<FIXED, for player summons>
+
+== 253. Change messages for weidling awkward weps to show up only at
+ values <= -4 (for real problems) and change message to "not taking
+ full advantage of the weapon" or somesuch. More flavour, too..
+ maybe messages like "you're too clumsy" for dex<10; others for
+ high (but unbalanced) stats: "You'd be (a lot) better with
+ that weapon if you were (stronger/more dextrous)"
+
+xx 254. Give Earth Elementalists a few stones (say 10-15) to help them
+ get started?
+
+>> addressed with the new, 'easier to run away from' monster AI?
+
+== 255. I thought someone had added the MST_* enum usage to mon-data.h,
+
+== 256. Would be nice if the wizard patch I put up in the files directory
+ made it into the code.
+
+== 257.PS Oh, using crawl -scores leaves the terminal in a bad mode...
+ stty sane is required to sort things out (either curses shouldn't be brought
+ up with this option, or it should be shut down properly).
+
+Just change the exit() call to a stuff::end() call.
+// check for highscore list - must be done BEFORE libw32c init
+ if (Options.sc_entries > 0)
+ {
+ cprintf(" Best Crawlers -"EOL);
+ hiscores_print_list();
+ end(0);
+ } The argument to end() is the exit value. That should probably be 0,
+rather than 1, since there's no error here.
+
+== 258. This bug ( if it is a bug ) has been around for a while... it seems
+: that sometimes when you poison a monster and it dies from the poison,
+: it gives you exp, and other times it doesn't. Is there some logic
+: behind this? A low level character of mine just barely managed to
+: kill an OOD hippogriff using poison, and got gypped of the exp. =(
+
+>> Very old problem in beam code; poison_monster was being called
+>> incorrectly.
+
+xx 259. I once got a corpse from a summoned snake - I hadn't been
+able to reproduce it, but it's corroboration.
+
+== 260. Give monsters large bonus while target is MHITYOU and behavior is
+ BEH_WANDER, during player stealth checks - monsters will still be on
+ the lookout for the player.
+
+ Give a small chance each clock tick of deleting the MHITYOU; i.e. monster
+ 'forgets' about the player. Stupid monsters forget faster..
+
+== 261.
+I was playing a transmuter, and noted that I was getting "You
+punch the <foo>" messages while fighting in spider form. I'm not
+getting the unarmed punch attack, so I think the verb comes from
+fight::weapon_type_modify(), which doesn't take transformations into
+account:
+
+static int weapon_type_modify(int weapnum, char *noise, char *noise2,
+ int damage)
+{
+ int weap_type = WPN_UNKNOWN; if (damage >= HIT_WEAK)
+ {
+ if (weapnum == -1)
+ weap_type = WPN_UNARMED;
+ else
+ {
+ if (you.inv_class[weapnum] == OBJ_STAVES)
+ weap_type = WPN_QUARTERSTAFF;
+ else if (you.inv_class[weapnum] == OBJ_WEAPONS)
+ weap_type = you.inv_type[weapnum];
+ }
+ } strcpy(noise2, ""); switch (weap_type)
+ { ... case WPN_UNARMED:
+ if (you.species == SP_TROLL || you.mutation[MUT_CLAWS])
+ {
+ if (damage < HIT_MED)
+ strcpy(noise, "claw");
+ else if (damage < HIT_STRONG)
+ strcpy(noise, "mangle");
+ else
+ strcpy(noise, "eviscerate");
+ }
+ else
+ {
+ if (damage < HIT_MED)
+ strcpy(noise, "punch");
+ else
+ strcpy(noise, "pummel");
+ }
+ return damage; ... }
+}
+
+xx 262.
+
+from Win32 precompiled pr10 on Windows 2000:
+
+You see here a white potion.
+B - a white potion
+Drink which item? (I choose B)
+You feel much better.
+Eat which item?
+That banana was delicious!
+B - a white potion
+You finish eating.
+
+>> Must have had autopickup off, but I cannot reproduce.. think it
+>> might have been fixed by fixes to message.cc
+
+== 263. When i name a character 'con' or 'Con' it freezes the game.
+
+== 264. Generate wandering monsters on/near stairs about 10% of the time,
+ regardless of player position, but disallow banding and generate a
+ message ("A %d enters from above/below!") if player is around.
+
+== 265. Has anyone else noticed that after a draconian dies, every high-score on the
+ screen is listed as having been a draconian? When a non-draconian dies, the
+ draconian is listed as having come from race "Yr".
+
+== 266. Cleaned up monster blinking.
+
+== 267. Monsters following up the stairs if they are "not aware" of the player (odd!)
+
+== 268. Some problems with monsters not following player position correctly, or
+ just plain waggling back and forth when they should be beating on the player.
+ Sigh.. gotta look closer at those movement routines. :P Not ready for
+ prime time yet.
+
+== 269. Simple fix to handle_behavior()
+
+== 270. After a while, crawl again went of bounds, this time with this
+ backtrace:
+
+ #6 0x80e9119 in seekmonster (p_monsterid=0xbffff1e0) at mon-util.cc:816
+ #7 0x80e91bc in mons_intel (mc=-1) at mon-util.cc:837
+ #8 0x80db2a7 in behavior_event (mon=0x8247e90, event=1, param=0)
+ at monstuff.cc:394
+ #9 0x81339c7 in noisy (loudness=8 '\b', nois_x=45 '-', nois_y=34 '"')
+ at view.cc:1249
+ #10 0x8132927 in monster_grid (do_updates=true) at view.cc:941
+ #11 0x8131bca in viewwindow2 (draw_it=0 '\000', do_updates=true) at view.cc:574
+ #12 0x8052f76 in input () at acr.cc:2020
+
+ The bad thing here is that line #7 has mc=-1, and seekmonster() will use
+ that as an index.
+
+== 271. Could we tie this to smartitude? Killer Bees and other insects can
+ forget that I exist when they can't see me while Liches ought to
+ cast 'detect exact player loaction' and Dig or teleport their way
+ to me, for a LOOOOOOOONG time after I damage one.
+
+== 272. Cleaned up abyss generation; there was a monster leak and some very strange
+ code.
+
+== 273. Fixed minor screen redraw problem (screen should have updated before monsters'
+ turn, but it wasn't. Caused some odd SFX artifacts, like beams/missiles going
+ through walls)
+
+== 274. Fixed nasty bug with cornered monsters which had them looping from flee->
+ cornered->seek->flee->...
+
+== 275. Fixed small logic error with perma-mutations
+
+== 276. I was invisible and an orc spotted me, shouted, and then came at me.
+
+== 277. gotta clean up monster target aquisition and release. Make more 'sensible'
+>> Add 'persist' variable; which is # of turns a monster will go towards their
+>> CURRENT target even if it is not in LOS anymore.
+
+== 278. Fixed type usage problem with quadrant_blink()
+
+== 279. Made monsters move a little more unpredictably along oblique paths
+
+== 280. Fixed up all cases I could find of friendly monsters frying players
+ (NOTE: they might still do so as part of calculated plans to help the player
+ out - some collateral damage is acceptable!)
+
+== 281. "The your cursed +1 robe is stuck to your body."
+ "You are a elf wizard."
+
+== 282. Can't pick a target with Apportation spell.
+
+>> works fine for me. Added a helpful message.
+
+== 283. It seems that sometimes monsters are not interested at you even if
+ you shout ("!") at them. Or is it feature ?
+
+>> nope, bug. Any noise coming from the player's position should alert
+>> hostiles within range depending on the volume of the noise.
+
+== 284. Sometimes monsters (rats, bats and probably others) attacks you,
+ but they are still described as "not interested".
+
+>> fixed in direct.cc.
+
+== 285. I have also
+ made some changes to the file attributes when it is compiled with MULTIUSER
+ option turned on, since I think the player's save and level files should NOT
+ be group writeable :), but the score file should be.
+
+>> .sav and level files are private (600). Ghost and score files are not (664)
+
+== 286. There seems to be a more serious bug with summoning monsters in Crawl pr11:
+: I`ve found that summoned creatures aren`t giving any experience to your
+: character when they kill things any more, which makes summoners a bit crap.
+:
+: Also, when my Chaos Knight summoned a demon ( yquxy whatsit) it kept trying
+: to eat my intelligence and mutate me, which has never happened before.
+: Demons killing monsters didn`t give me any message from Makhleb either.
+
+Both fixed. #1 is logic problem, #2 is generic friendly fire problem.
+
+== 287.
+ I'm playing pr11, DOS version. My merfolk healer was in a situation like
+ this:
+
+ ................. (water squares...
+ ..;;.............
+ .................
+ .................
+ .................
+ .................
+ .................
+ ......;.......... water squares end)
+ ......@.......... this is solid ground
+
+ The placing of the symbols is not accurate.
+ Now none of the eels could hit me with their blasts. The eel right next to
+ my character kept shooting straight upwards and the two eels farther away
+ kept missing me by my right side. At least one of them also hit the eel
+ right next to me. I killed the nearest eel, after which the other two just
+ kept missing me. My character was not invisible.
+
+: Also, it's not just electric eels. Storm dragons also tend to shoot in
+: the exact opposite direction to the character. Looks to me like it might
+: be a sign problem...
+
+>> ugh. bad side effect from tracer explosions. Fixed.
+
+== 288. Fixed whopper of a bug with generation of fast monsters which often hung
+ the game (especially in areas with lots of fast monsters, like the hive).
+
+== 289. Brent's balance patches
+
+>> applied all, reduced missile damages by 1 to compensate. Gave daggers
+>> and spears better chances to hit.
+
+== 290. The "temporarily insulated" message is weak... it's kind of
+ confuing and looks a bit like a bug. Better would be a "god
+ protected you" message after the explosion... that would tell
+ both the source and the reason for the insulation.
+
+>> agreed. Changed to post-divine blast message.
+
+== 291. Hate to follow up to myself, but a small thing was brought to
+ my attention. Now that the dice for damage are one based, this
+ means that Magic Dart is now really the best first level spell,
+ this being because it uses the 3dX notation (ie dam > 100), so
+ it does a minimum of three damage (which isn't bad) and always
+ hits (which makes this too good for a spell which is very common).
+
+ So I'm suggesting that the damage for Magic Dart be converted to:
+
+ damage = 1 + (power / 2) (this is in it_use2.cc).
+
+>> changed to 1+pow/4.
+
+== 292. The third ability gained by followers of Zin is pestilence. This summons
+ a variety of bugs that hopefully will helpfully kill off whatever happens
+ to be bugging you.
+
+ Trouble is, every time my character uses it at least one my little
+ chitinous friends gets killed. Zin doesn't like that, so my character
+ feels guilty.
+
+ The same thing happens with the fifth ability, Summon Guardian, but
+ it's not so bad there. The summoned Angel (or Daeva, for fans of the
+ TSO) can generally take care of itself, although I did lose a Daeva to
+ a dragon once. Luckily it left behind a long sword of holy wrath to
+ assuage my guilt.
+
+>> add a flag to god-summoned critters so that their death doesn't cause
+>> piety loss. Summoned friendlies will still give piety loss; the 'good'
+>> gods don't appreciate you summoning beings as cannon fodder!
+
+>> tried to apply the god_gift flag wherever it made sense; Zin Pestilence
+>> was the only place I could find.
+
+== 293. Finally found and fixed 'critters summoned out of LOS' bug.
+
+== 294. Fixed logic problem in quadrant_blink()
+
+== 295. Fixed buffer overflow in acr.cc during char dumps.
+
+== 296. Fixed minor display problem in backlight_monsters()
+
+== 297. Added Guus' -plain and doc patches
+
+== 298. CHMOD_PUBLIC now uses 664 instead of 666.
+
+xx 299. Actually, there was at least the comment from the newsgroup
+about elven conjurors starting with the Ice/Air book (because
+they're better at Air than Earth and equal in Fire and Ice).
+The actual spells tend to lean a bit more to the Fire/Ice
+side so I really don't see why they shouldn't have the choice
+(or rather why anyone should have this auto-picked). Adding a
+selection screen and an initfile option wouldn't be that hard.
+
+== 300. Change magic dart damage to 2+power/4
+
+== 301.
+>I'm wearing a ring of Shadows. When I try to take it off, it says
+: >that it's stuck to me. When I 'v'iew it, it says that it has a curse
+: >placed upon it. But it doesn't show up as cursed in my inventory
+: >list, and scrolls of remove curse don't work.
+:
+: Oh... and if it helps at all: I killed a mummy at a certain point,
+: with no apparent curse effect. This may be how the ring got cursed
+
+>> the check for randart rings was looking for 200, but the actual
+>> inv_dam value for randart rings is 201. "Pluses2" of 100 is not
+>> well defined in the code... :(
+
+== 302. Abyss go to shits after abyss_teleport()
+>> wasn't setting terrain to DNGN_UNSEEN. Was using old (stupid)
+>> value of 30 (white triangle!)
+
+== 303. In fact, they seem able to sneak right up to alert monsters and still
+deliver the first blow. I think that such a blow should sometimes count
+as a stabbing attack, just as blows delivered to fleeing or confused
+monsters currently are. Currently such attacks have a
+
+random2(200) <= you.skills[SK_STABBING] + you.dex
+
+chance of being stabs.
+
+>>Gave chance if monster isn't paying attention to you (foe != MHITYOU), but
+>>stab bonus is much lower (3) than stabbing a sleeping/fleeing monster.
+
+== 304. Not sure if you saw my big report on roguelike.misc, since it hasn't
+: been fixed and doesn't seem to appear on the 'to do' list. The spell
+: 'Lee's Rapid Deconstruction' doesn't do any damage at present. It
+: occasionally destroys the wall which is targetted, but I detonated 20
+: walls next to a rat and didn't scratch it. This leaves Earth Mages
+: without an area-effect damage spell, which is rather detrimental to
+: their health :(.
+
+>> Fixed. Needed subtle wrinkle in explosion map, as well as some
+>> fixes to the spell itself.
+
+== 305. Currently, if you skip the first naming screen but use the second
+you can overwrite a previous game. Although this is unusual
+behaviour, it's not very desirable, it should at least warn
+about this and potentially give an option to load the old game.
+
+>> fixed. good catch.
+
+== 306. Wielding a bunch of stones and trying to throw one of them,
+results in all of the stones being thrown (and potentially disappearing
+as well).
+
+>> Very, very subtle bug in beam.cc inherited from original codebase.
+>> Fixed.
+
+== 307. monster_move(monster);
+ // reevaluate behavior, since the monster's
+ // surroundings have changed (it moved)
+ handle_behavior(monster);
+
+ Some monsters are getting killed on their move, and then the
+ code in handle_behavior() will fail an ASSERT since monster->type
+ will be -1.
+
+== 308. After one hit with a poison dart, "the goblin looks rather
+more sickly". The non-"...more..." message is (repeatably)
+never shown. - Josh PS: Could we consolidate the poison-effect-namespace to either
+"ill" + "rather more ill" or "sickly" + "rather more sickly"?
+I favor the former.
+
+>> oops. simple messaging problem. Similar prob. in sticky flame.
+
+== 309. Only one bug found - in newgame.cc (line 2222) should be used
+strnicmp() instead of strncmpi(), because the second one isn't
+existing function :)
+
+From BWR:
+>Actually, we should probably avoid both, I don't think they're
+>very stardard (BSDish systems will use "case" over "i").
+>strncmp() is POSIX (among others) so it's okay, but the case
+>insensitive compare almost always causes problems (if we're going
+>to use it, we should probably have it defined somewhere, so it
+>can be adjusted or handled by autoconf (should we go that route)).
+
+>> correct - neither are POSIX. However it is being used in a DOS/win32
+>> section only, and strnicmp() is the proper call as Michael pointed out.
+
+== 310. I've looked at monster pronouns and IMO (supported by dictionary)
+ Erica and Frances should be female and Francis should be male.
+
+ Probably also description of uniques could be slightly changed
+according their gender, for example
+Jessica - "An evil apprentice sorceress."
+
+>> done.
+
+== 311.
+In either event, to get crawl to compile, the str<foo>cmp(x,y) == NULL
+in initfile.cc needs to be changed to "...== 0". The line is near 520.
+
+== 312. Change shops back to old [0][5+i] item location. Leave items
+ carried (ie not on grid) at 0,0. Make sure to modify link_items();
+ keep compatibility with old saved games.
+
+== 313. I think giving Ogre and Troll Fighters Dodging 2 is probably in order.
+
+== 314. Fleeing monsters were not taking advantage of the flexible movement
+ code (Guus)
+
+== 315. Gave monsters a little better chance of sniffing out foes (stealthy
+ players will fare better). After arriving at target x,y, will do a check
+ for continuing on via ESP/noise/whatever.
+
+== 316. Removed ability of monsters to see through walls. :)
+
+== 317. : Just tried casting Tukima's dance while wielding an artifact weapon.
+ : I get the message "You hear a popping sound." and although my artifact
+ : stays in my hand, something that looks like a Shadow appears. Its
+ : name: 36317738 iron wands. If you 'x' it and hit '?' it says "A
+ : dancing weapon floating in the air." just as if the spell had worked
+ : right. The thing even moves and attacks like a summoned monster, and
+ : seems to have combat stats of some sort, since it can kill things.
+ : When the spell expires, it says "The weapon drops from the air." as
+ : normal, but the monster just ceases to exist; it doesn't leave a copy
+ : of the weapon behind or anything. You can even summon several of
+ : these "36317738 iron wands."
+
+>> ugh, two separate logic problems in dancing_weapon(). Fixed.
+
+xx 318. I could be wrong, but I think that the Orcish Mines had no scrolls,
+ potions, wands, rings, or amulets. Very odd. But since Gordon just
+ rewrote dungeon.cc, we should wait for reports about pr13.
+
+>> this is working exactly as designed, if I read the original code correctly.
+
+== 319. But I failed in my casting too often, and the
+ buildup of mutagenic energy had some unfortunate effects. Even after I
+ gained some levels in Divination, and my Success chance was up to Fair,
+ I failed to successfully cast the spell sufficiently often that I mutated.
+ So be wary of casting even second level spells.
+
+ from BWR:
+ We've have people getting mutations here from level one spells.
+ I'm thinking that at the very least we need to lower the baseline
+ for noticing that you're accumulating radiation... and possibly
+ put in some warning messages so people know that they're getting
+ a bit "hot" and that they need to take it easy for a while.
+
+>> messaging much better. toned down nastiness from low level spell failure.
+>> made my easter egg much less abusable.
+
+== 321. I do wonder that Zin wasn't upset when I zapped the Angel initially.
+
+>> Zin is stupid and can't differentiate between a hurtful and helpful
+>> spell. Perhaps a small subset could be classed as obviously harmful,
+>> so that if you e.g. healed or hasted the daeve it wouldn't get pissed.
+>> have to be done in beam.cc, I think... any non-enchantment would be
+>> classified as harmful, I think. (?) Other enchantments would have to
+>> go in a big if/switch.
+
+>> this will also help to NOT piss monsters off if you're trying to help
+>> them.
+
+== 322. 2) Item clean-up in the dungeon seems far more
+ aggressive than before. I've dropped items,
+ popped down a staircase and right back up,
+ only to find everything I dropped gone, gone,
+ gone! This would be on "cleared" levels where
+ the likelihood of item overload is almost nil.
+ Is this a change in gameplay that I missed? In
+ pr13, I am finding myself holding onto *everything*
+ because I *know* that if I drop it and leave the
+ level it will simply disappear ... a PITA situation
+ for low-strength characters wanting to stash some
+ extra stuff for later.
+
+>> oops. Somehow broke item save/reload for any item dropped by player
+>> or monster. Took closer look, cleaned up horrible hacky code. :P
+
+== 324. Make random zombie generation reflect the actual level; it is currently
+ random.
+
+>> no more horribly OOD zombies.
+
+== 325. Monsters with OFFENSIVE spells in mspell[2] will still use them
+ on the player (sigh..)
+
+>> fixed all cases in mon-spell.h
+
+== 326. Accidentally doubled the number of monsters created w/ level.
+
+== 327. : Scrolls of fear appear to be bugged. Read one, got messages saying
+ : that the monsters were frightened (ie, not "The blah resists."), but
+ : they kept moving towards me and attacking me.
+
+== 328. In pr12, my Troll could see an unseen horror. He was not wearing any
+ devices that could lend him see invisible, and orcish wizards were
+ turning invisible earlier in the game.
+
+>> oops. logic problem in mons_del_ench()
+
+== 329. Sigmund and other uniques appearing multiple times
+
+>> logic error in dungeon.cc
+
+== 330. Magical staves are described using the old style (speed)
+
+== 332. Monsters walk into clouds, except for intelligent ones?? Check code:
+mannix writes:
+Now here's an idea to which I can warm: stupid animals
+ thinking "where there's smoke, there's fire", and more
+ intelligent critters in possession of the ability to
+ discern betwen the two.
+
+== 333. Monster Placement: is there a place where, if you can't find a sensible
+ location for a monster in a group, you just put that one anywyere?
+ I think that's part of what makes monsters appear in LOS ... I just
+ got a gnoll and two orcs.
+
+>> stupid error in monplace.cc. Forgot that distance() function returns squared
+>> values.
+
+== 334. Shapeshifters: one turned into a Swamp Worm. This ought not happen,
+ as those are water-only monsters, despite their worm designation.
+
+>> fixed. Won't let monster poly into water-based monster on land.
+
+== 335. dungeon.cc::pick_an_altar(): needs to have a case added, near line 5988:
+ case BRANCH_SLIME_PITS:
+ case BRANCH_ECUMENICAL_TEMPLE: //jmf: ADD THIS LINE
+ altar_type = DNGN_FLOOR;
+ break;
+
+ ... to prevent "bonus" altars in the Temple. This was probably the
+ original author's bug (i.e.: mine).
+
+== 336. So the city-like dungeon code has some sort of an off-by-one error.
+ The "buildings" (squares with doors) once were separated by at least
+ one space of floor; no longer! Furthermore, they once didn't overlap.
+
+ The changes provide much more interesting cities, however the door
+ generation hasn't quite caught up. I've seen things like:
+
+ #########
+ ####+...#
+ #####...#
+ #####...#
+ #########
+
+ ... where it's fairly obvious what went wrong. (I discovered these
+ types of things when playing a gnome.)
+
+ The quick fix would be to restore the 'air' around buildings, but
+ IMHO that would be a loss. The new cities are so much cooler.
+
+ A more complex fix would be in two steps:
+
+ 1) make sure there's a passageway around the border of the level.
+ A single sweep setting all those squares to floor would be fine.
+
+>> tightened up door placement in box_room(); since both city_level()
+>> and plan_4() use it, stuff works better now.
+
+== 337.
+ Sticky Flame puts monsters in the player's thrall
+
+ This last one is really bizarre, because it doesn't happen
+ in the wizard mode compile (although I can take that character
+ over to the normal version and have it happen there).
+
+ It's intestesting to note that these monsters end up with
+ enchantment number 30, which is one less than the sticky
+ flame enchantments... in the wizard mode they seem to get
+ enchantment number 60 (which is one less than the other
+ set of monster sticky flame enchantments... also known
+ as POISON_IV). I'm wondering if anyone else can verify
+ this.
+
+ I suspect that there's some problems in the enchantment system, which
+ could be responsible for both of these. Looking at sticky flame today
+ it seems that my sticky flame ends up as ENCH_POISON_III or _IV
+ (59 or 60) regardless of playing crawl or wizcrawl. The in-thrall
+ thing seems to not be happening right now. It occurs to me that I
+ never actually got "burn" messages in pr12 when I was using napalm
+ (I hit an Ice Dragon about six times with it and it never seemed
+ to take any damage after the initial hit)... looking at the code now,
+ I'm pretty sure I should have been (and that any appearance of working
+ in the recent past might have in fact been delayed poisoning).
+
+>> Fixed. sticky_flame_monster() was badly broken. gawd I bunged that up.
+
+== 338. As a side note, I now backstab bats quick often (I take it that
+this is a side effect of the new backstabing situtation). I'm
+not really sure I should be able to do that (or more to the point,
+does this mean I can expect regular backstabbing of ball lightning
+and spatial vortices which might be a bigger problem).
+
+== 339. In Win32 pr13, if you set class = C in init.txt, your character will be a
+priest ('c') instead of a wanderer ('C'). This happens regardless of if
+your race allows wanderers.
+
+>> bug in initfile.cc
+
+== 340. Basically, nowdays if you turn a bat into an undead slave,
+it suddenly comes to it's senses and becomes an inadvertant
+killing machine (well against monsters that can't easily kill
+it in one hit), as it walks straight up to them and hits them
+3 or 4 times a round. Undead bats should still flutter around
+(that's what keeps them in check considering their amazing speed).
+
+== 341. I've run into some surprisingly powerful ghosts in pr13.
+They are only overly powerful in non-wizard compiles; the
+two times I switched to a wizard-compile they acted normal. One
+was casting MS_ENERGY_BOLT instead of either magic
+dart or throw flame (the two spells that character knew).
+
+>> very bad indexing bug in ghost loading. Who knows what else
+>> this was screwing up.. :P
+
+== 342. Some attempts to animate a skeleton result in a puff of smoke in addition
+(I think) to a new slave.
+
+== 343. We've had several reports here about necromancers zombies and skeletons
+actually getting poisoned from time to time by monsters. As far as
+I can tell this really shouldn't be happening.
+
+>> probably a side-effect of messed up enchantment code.
+
+xx 344. If you start a game with -plain, Save, then continue the game without -plain,
+then the displayed map for remembered locations uses the -plain characters.
+
+If you start a game without -plain, Save, then continue the game with -plain,
+then the displayed map for remembered locations uses the extended characters.
+
+== 345. I haven't heard this one mentioned, but when wielding an ego item you
+typically get this:
+
+d - an elven short sword (weapon in hand)
+Wielding this short sword is a little awkward.
+It softly glows with a divine radiance!
+
+The elven short sword should be id'd as "holy wrath" in the first line...
+it was unid'd when I did this, so it looks like a simple case of moving
+the identify code to a place before the printing.
+
+xx 346. Breathing fire via the mutation prints this unnecessary line:
+" .\n"
+
+xx 347. I got a segfault when entering the abyss; wasn't playing under
+gdb, for some reason, so didn't get a stackdump. Sorry.
+
+== 348. Brent's XP patches
+
+== 349. Josh's sludge elf, etc patches
+
+== 350. In mon_util.c::define_monsters(), there are some mystical values
+ assigned to m2_sec, some of which can be made more apparent by
+ using the appropriate MST_* values.
+
+== 351. Actually, a thought just occured to me that the new stabbing
+ code that gives occasional backstabs against flutterers, is
+ probably very annoying to Paladins. We might need at least an
+ additional check to prevent some of the excusable backstabs from
+ being naughty... perhaps it's just as simple as only making
+ attacks on fleeing, sleeping, and confused monsters call naughty
+ (in which case, it might be reasonable to remove the random
+ chance for TSO applying penance).
+
+ One of the problems with confusion based stabbing is that some
+ monsters are created with it, and most of those probably shouldn't
+ be backstabable (various voritices, ball lightning, vapours). So
+ maybe we might need some way of distinguishing if the stab is
+ appropriate (or if not that, we should probably leave them off the
+ above list for naughtiness).
+
+>> new code to void backstabbing against flutterers (solely because
+>> they are flutterers) and perma-confused critters (solely because
+>> of confusion).
+
+== 352. in check_mons_magres(), the return value for the special "< 6"
+ bonus is backwards. I'm probably to blame for not noticing that
+ the function is logically backwards, I probably got confused by
+ one of the cases in spells4.cc which use this function backwards
+ (a few of which are my own).
+
+== 353. I added a "gotoxy( 18, 9 )" to the top of our direction function,
+ which nicely solved the porblem where the cursor was left at the
+ end of a prompt (ie for conjure flame).
+
+xx 354. We've had a report of skeletons picking up skeletons.
+
+xx 355. I've had several people reporting some oddness when returning
+ to a level via a straight up and down... things like monsters
+ completely disappearing and traps being created.
+
+== 356. pets seem to try and track the target monster even when they're
+ on the wrong level. Basically, if you go down stairs and tell
+ your pets to attack something and the go upstairs to try and
+ bring more pets down, the upstairs pets will be running around
+ wildly... going downstairs and killing the target made the
+ upstairs pets return to the master homing behaviour.
+
+>> simple fix. Set pet_target to MHITNOT on level change.
+
+== 357. The lastest in the bizarre happenings around here was a friendly
+ player ghost... wonderful entertainment as it would should out
+ things like "Run, I'll cover you" and such.
+
+>> always a possible problem; some fields were left uninitialized from
+>> monster_cleanup(), and never initialized in the ghost code!!
+
+== 358. Removed digging ability from Disrupt()
+
+== 359. Added 'random' beam that affects each cell as one of { fire,
+ cold, magic, electricity, poison, negative energy, acid }. Only
+ used in my easter egg so far.
+
+== 360. Maybe we should instead be considering shifting the greater
+vaults down to level 10+, and the lesser vaults to 7+ (there
+are many more mini-vaults (and better quality these days, and
+this does have the advantage removing dlev 4 guardian naga
+encounters... we've had several).
+
+== 361. Okay, compiled it up and the only problem was that link_items() is
+declared both static and extern (removed the static prototype).
+
+== 362. One other little problem: The magic resistance check for monsters
+is now correct, but there are some inappropriate calls to it over
+in spells4.cc (in particular Twist is currently unusable).
+
+>> reversed the logic.. this was just too non-intuitive and backwards.
+
+== 363. Move the Crawl.mcp file out of the source folder.
+
+== 364. Add "#define ESCAPE 0x1B" to defines.h
+
+== 365. In eat_food() in food.cc add some code before the "You don't have
+ any such object." case:
+ if (keyin == ESCAPE)
+ return;
+
+== 366. lava_spaces and water_spaces in builder_monsters() in dungeon.cc
+aren't inited. (This looks like a nasty bug).
+6) In quadrant_blink() in spells4.cc there's a line that reads "while
+(!done && random2(100) < pow--);". Please move the semi-colon to its
+own line.
+
+== 367. Snakes now flutter like bats did. They also display the "not interested
+in you" message when e'x'amined.
+
+ Josh:
+ I've had a batty frog and batty snake. Both had the old
+ 'not interested in you' inspection message. Most frogs
+ and snakes were not batty.
+
+>> oops. Monster->flags was not being set to 0 at monster creation.
+
+== 368. in monstuff.cc::handle_spell(), the CONFUSION && !vapour
+ should probably be changed to use M_CONFUSION to be generic.
+
+== 369. the contamination messages should probably be in the warning channel
+
+== 370. wizard's hats say they give AC, but they don't
+
+xx 371.Fireballs are rather larger than I remember.
+Mana explosions from magic accumulation are the same size (very big).
+I'm pretty sure the former is unintentional; is the latter?
+
+== 372. There's an illiterate "it's" in the description of Silence. The word
+ought to be "its". (This is a peeve of mine. "We hate's them, ye's
+presciou's!")
+
+beam.cc::2753
+- hearMsg = "You hear a gentle \'poof\'";
++ hearMsg = "You hear a gentle \'poof\'.";
+
+== 373. I haven't seen any miscast effects except for the irradiation one.
+I think this is due to a loop in spell.cc which tries to figure out
+which school of miscast-effects applies to a given spell. The loop is
+a bit past line 300 and seems to ignore the new 'bitmap' representation
+of spell-schools. I know that miscast_effects is getting bogus sptyps.
+
+Full, real fix:
+unsigned int sptype = 0;
+do {
+ sptype = 1 << (random2(SPTYP_LAST_EXPONENT+1));
+} while (!spell_typematch(spc2, sptype));
+
+== 374.
+newgame.cc::3410 + if (you.species == SP_HILL_DWARF ||
++ you.species == SP_MOUNTAIN_DWARF)
++ you.skills[SK_MACES_FLAILS] = 1;
++ else
+ you.skills[SK_SHORT_BLADES] = 1;
+
+== 375. Later in newgame.cc: Now that Sludge Elves suck at enchantments
+and conjurations, we could remove the options for them to be Conjurers,
+Reavers, Enchanters and Crusaders.
+
+** 376. Something is still deleting the ABJ_xx enchantment for summoned
+monsters. Don't know what though.
+
+== 377. Fixed magic resistance of normal & small snakes.
+
+== 378. case CLOUD_POISON:
+ case CLOUD_POISON_MON:
+ if (mons_res_poison(monster->type) > 0)
+ continue;
+ if (monster->hit_points >= random2avg(37, 4))
+ continue;
+ break;
+
+THIS IS WRONG VVV
+
+ // dumb monsters can be fooled by smoke
+ if (mons_intel(monster->type) > I_ANIMAL || coinflip())
+ continue;
+
+ // this isn't harmful, but dumb critters might think so.
+ case CLOUD_GREY_SMOKE:
+ case CLOUD_GREY_SMOKE_MON:
+ if (mons_res_fire(monster->type) > 0
+ || (monster->inv[MSLOT_ARMOUR] != NON_ITEM
+ && mitm.special[monster->inv[MSLOT_ARMOUR]] % 30
+ == SPARM_FIRE_RESISTANCE))
+ {
+ continue;
+ }
+
+== 379. Brent's 'friend-brand' patch
+
+== 380. Undead should *not* have morale failures, nor should the dumber ones avoid
+ flaming clouds of death (brown & white 'z's & 'Z's). Skeletal warriors
+ might avoid FCoD since they do make one other intelligent decision (wrt/
+ casting their spell), but they ought never run away.
+
+>> who says running away is due to morale failure?
+>> REALLY dumb (I_PLANT) creatures will now walk through harmful clouds.
+>> this includes most of the shambling (mindless) undead
+
+== 381. quadrant_blink() from Brent
+Brent Ross <bwross@c...>
+
+ In this method, what we're going to try for is the best match, and
+ allow the number of choices to be based on power. The basic hope
+ is that while even high power characters have to put up with some
+ randomness, the diameter of the cone decreases making it more
+ reliable.
+
+ let line = line segment extending out from player in the chosen dir
+ let best = NO_SQUARE
+
+ for i = 1 to f(power)
+ targ = random nearby square
+ if (dist( targ, line ) < dist( best, line)) then
+ best = targ
+ else if (dist( targ, line ) == dist( best, line )) then
+ // Not really sure we want this part, maybe we should throw in
+ // a random to keep the distance sane.
+ if (dist( targ, player ) > dist( best, player )) then
+ best = targ
+ endif
+ endif
+ endfor
+
+ if (best == NO_SQUARE)
+ mpr( "teleport control screwed up" )
+ random_blink
+ else
+ player = best
+ endif
+
+== 382. De-twink wanderers
+
+>> undefined USE_SPELLCASTER_AND_RANGER_WANDERER_TEMPLATES until we have
+>> "hedge" magic.
+
+== 383. Check that all spell books are listed for generation.. at least war chants
+ is missing.
+
+== 384. Add "Blowgun" (launcher) and "needle" (ammo)
+: basically, go through all code looking for BOW, add blowgun
+: go through all code looking for ARROW, add needle
+: assassins now start w/ blowgun & needles
+ except for deep elves; they get hand xbows since they tend to
+ suck at HTH and will rely more on ranged damage.
+: some chance for needles of Foo? (dungeon.cc) just poisoned
+: some chance for blowguns of Foo? (dungeon.cc) of venom
+: must remember to add in to item generation tables. :)
+: change throw_it() so that blowguns and thrown darts are
+ very quiet; all others make a noise - check fight.cc for
+ a good noise value. Note that alert() is simply not called.
+: give a couple monsters blowguns & needles to start
+: needles get damaged far less often (but make them rarer;
+ maybe only carried by assassinish-monsters.
+: Needle trap at higher levels; could be a source of needles?
+
+TODO: dungeon.cc::give_item() . which monsters have bguns/needles?
+other files not searched for WPN_BOW and MI_ARROW (our template for
+this stuff):
+
+== 385. fixed logic problem in cast_sandblast()
+
+== 386. If I cast a fire spell at something in the water, it leaves a trail of
+steam behind it. A fireball should have the same effect (but of course
+over a larger area)
+
+== 387. Josh' new diff (mostly Xom acts)
+
+== 388. A Skeletal Warrior just drank a potion of healing. This strikes me as
+wrong, from both pseudo-physiological and gameplay perspectives.
+
+== 389. I saw hellwing which polymorphed jackal to lava fish. Probably
+this is not bug but we should consider this.
+
+== 390. We've had
+someone complain here about his Ogre not being able to wear one.
+I thought we had decided that caps and wizard hats were wearable
+by all characters, regardless of headsize or horns.
+Anyone remember?
+
+>> there's a comment in item_use about caps & wiz hats being
+>> wearable by anyone "unless their head is too big (ogres, etc)"
+
+== 391. I've found a number of eggplants in pr15, err, 4.1.15
+ (these were supposed to be MI_NEEDLE.. what happened!?)
+
+== 392.
+I made it to the Abyss... Now I'm stuck in this loop in
+dungeon::define_zombie(): while(true)
+ {
+ // this limit can be updated if mons->number goes >8 bits..
+ test = random2(182); // not guaranteed to be valid, so..
+ cls = mons_charclass(test);
+ if (cls == MONS_PROGRAM_BUG || mons_rarity(cls) == 0)
+ continue;
+
+>> VERY tricky to fix correctly.. no wonder it was never done.
+
+(which monsters to allow as zombies in the abyss?)
+
+BWR:
+Or perhaps just picks with the base level set as high as
+possible... which will allow for Zombie Titans (which are high
+enough level that they're never "naturally" generated, I believ
+
+Well simulacrums are out right away. They don't appear naturally
+anywhere, due to the fact they sublimate away. On a similar note,
+ball lightning shouldn't be generated anywhere, but I believe I
+accidentally put them in the Realm of Zot... short lived creatures
+should have to be summoned in. As for zombie/skeletons or even spectres (which I don't believe
+are generated anywhere.... Spectral Warriors are generated,
+but they're like Skeletal Dragons in that they're completely
+different... don't think I've ever seen a Spectral "Thing"
+in any dungeon, at least not one I didn't create myself) are
+probably okay in the abyss... there are things like abominations,
+necrophages, skeletal dragons/warriors there already. Spectres
+might also be interesting in the Realm of Zot.
+
+== 393. Oh, dear. I think I might have left in a debugging bit that changes _all_
+generated traps to needle traps - they're supposed to be fairly rare, and only
+seen below level 3!
+
+== 394. It looks like the logic in poison_monster() needs adjusting, too, if you're
+getting credit for monsters done in by the poison from needle traps. Ah well.
+
+== 395. // * fixed: magical staves now described with new speed
+
+Actually, there's still one problem here. The '%' needs to be doubled,
+since the description string will eventually be fired through cprintf()...
+it currently gets dropped in both cases (weapon and stave).
+
+xx 396. An eloquent method of handling this would be to 'queue' shouting messages
+between character actions and conflating multiple shouts into a single
+message ("Several <foo>s shout" or whatever), possibly conflating by
+monster type ("Several <foo>s shout out! A <bar> yelps!") so that the
+player can be alerted to unique shouts and/or get the *flavor* of all
+the various bellowing beasties.
+
+== 397. Make zombie monsters appear a few levels (3-4?) earlier than their non-zombie
+counterparts
+
+== 398.
+> I was blowing needles at an orc wizard, and he very politely gathered
+> all the needles up for me. I appreciated him doing that rather than
+> casting those nasty spells at me. :)
+
+Now, I thought that logic had been fixed (at least, in the case
+of darts) such that monsters with potent HTH or spell attacks would
+not lower themselves to gather scattered items for characters :P
+
+>> fixed better. Monsters won't pick up if there's not much there, they're
+>> not wandering, and they already have ammo. Fleeing monsters never stop
+>> to pick up ammo.
+
+== 399. Needle traps will poison the player even if he or she resists poison.
+
+xx 400. Some first level spells won't allow the player to target him- or herself.
+This means that a player can't use those spells to see if he or she
+resists their damage type. Knowing if one resists a damage type is useful
+when trying on mysterious rings.
+
+>> need some restructuring to do this; burn_freeze() isn't set up to
+>> actually affect the player. :P
+
+== 401. Personally,
+I think Ijyb should probably get an XP modifier of 5 (and even
+then is still worth 40 xp)
+
+== 403.
+I think some kind of notice should be given, when body wich is carried
+becomes rottens. And ghouls should definetly be able to see when
+chunks of meat become rotten. As should everyone else, I think.
+
+>>mv: added appropriate messages
+
+
+== 404. My Draconian monk (not so difficult as you might think) got mangled
+by a goblin with seemingly limitless ammount of scrolls of summoning.
+He summoned like 5-7 abdominations before my monk got killed. And
+this was at level 2. Extremely bad luck or bug?
+
+== 405. Crash in pr14
+This occurred in the Realm of Zot, while attacking an Orb of Fire, which had
+just exploded.
+
+>> very nasty. Fleeing monsters with "emergency" spells requiring tracers
+>> would crash the game.
+
+xx 406.
+When using Stone Skin with Dragonian it says "Your skin feels harder"
+and "Your skin feels tender" instead of "Your scales feel harder" and
+"You scales feel softer".
+
+>> These guys still have skin underneath all those scales..
+
+== 407. Fix quadrant blink again:
+Which gives us the one-step formula:
+
+ dist = abs( (y - you.y_pos) * (tx - you.x_pos)
+ - (x - you.x_pos) * (ty - you.y_pos) ) / s
+
+ where (x,y) is the player's targeted square/vector,
+ (tx,ty) is the spell's targeted square,
+ (you.x_pos, you.y_pos) is the player's position,
+
+ and s is the distance between (x,y) and (you.x_pos, you.y_pos).
+
+
+ The important thing to notice here is that s is constant for all
+ of the trials (one or root-2), and since we don't care about
+ an accurate measurement (only a relative one between trials),
+ we can reduce it to one
+
+== 408. Although, 'f' does fire needles correctly, the ')' command doesn't
+ actually show that this is the case (see command.cc::list_weapons()).
+
+== 409. Poisoned needle gives messages in bad order. Patch from Guus.
+
+== 410. > I just noticed that my character has a Dex of 63. I've chosen every
+ > ability increase to be in dex, and he occasionally wields an artefact
+ > dagger that is +3 to dex. I don't think it relates to save files,
+ > as I haven't saved the game in three days.
+
+ The stat growth is caused by autobutchering when the butchering weapon
+ has a stat bonus. I get the stat bonus when I wield the weapon, but do
+ not relinquish the bonus when I unwield it.
+
+>> ewww. this was ugly.
+
+xx 411. I was playing a Spriggan Transmuter when i entered the mines. I was
+ overwhelmed by +10 Orcs so i went back up. One orc followed me. I
+ then started running away until i was several spaces away, turned and
+ cast disrupt killing the orc. As the orc died the stairs to the
+ mines disappeared.
+
+>> can't reproduce.
+
+== 412. I've been trying out Chaos Knights and the critters that Xom summons
+ for you have this annoying habit of polymorphing the bad guys to
+ *way* OOD monsters. For example, my last knight was level 3 and is
+ listed at -19/28 HPs in the morgue file. This was one spell and he
+ was at full health when it happened. Although this was before the
+ latest patch so perhaps it's related to the other OOD problems.
+
+== 413. >I've seen that disorder message a few times too. The first time the
+ >game hung when I tried to go back up to that level. After that I
+ >avoided loading those levels again. :-) There really needs to be
+ >better sanity checking here. It's not right that a bad level can be
+ >generated and only found when the player stumbles across a bad pile
+ >of items.
+
+ From what I can remember, this kind of thing is almost
+ certainly the result of bugs in either the monster inventory
+ code or the code responsible for placing monster corpses on
+ death. The behaviour where the player picks up an item and
+ it doesn't get listed in the inventory tended to be caused
+ by the existence of a link to an item with a quantity of 0
+ (this also causes "a scrolls labelled SDFKLSFD" - when the
+ quantity is zero it puts an 's' on 'scroll' but leaves the 'a'
+ in front).
+
+== 414. Characters cannot exercise fighting, weapon, or unarmed combat skills
+ against plants/fungi, so perhaps they shouldn't exercise stabbing.
+ And plants/fungi should probably always appear disinterested.
+
+ This assassin has also been paralyzing monsters, but can't seem to stab
+ one afterwards.
+
+== 415. My assassin carefully approached his victim:
+
+ Move the cursor around to observe a square.
+ Press '?' for a monster description.
+ A plant.
+ It doesn't appear to be interested in you.
+ Floor.
+
+>> obviously need some kind of data-driven thingie here for stabbing / paying
+>> attention.
+
+== 416. I fire a "Disrupt" at a worm just off screen (as I'm running away):
+
+ You kill the worm!
+ Nothing appears to happen.
+
+== 417. He was standing on a down stairwell. He had full view of each of the
+ adjacent squares, but not all of distance 2 squares. He was at a little
+ over half his hp, and I hit '5' to rest and recover.
+
+ Suddenly there was a bellow, and a hydra was beside him. The hydra
+ proceeded to lay the smack down, slaying the poor assassin. I guess
+ it's poetic justice, since the assassin slew quite a few monsters
+ by suddenly appearing beside them, fiery blade in hand.
+
+>> almost definitely a result of the new 'near stairs' code. Needs some
+>> refinement, I suppose. (evil grin)
+
+
+== 418. Elyvilon got upset when a needle trap killed a monster just after
+ I had prayed. :)
+
+
+== 419. Over the course of the game I obtained around a dozen blowguns and only
+ one crossbow, so they may be too numerous.
+
+ (most blowguns came from the ground)
+
+== 420. Two minor quibbles on spell descriptions.
+
+ a) Unlike the other brand weapon spell dscriptionss, the Poison Weapon
+ spell description does not mention that the spell won't work on
+ branded weapons.
+
+ b) The description of the Disrupt spell says that the spell "disrupts the
+ matter of another creature's body", but the spell also affects
+ creatures with non-material bodies.
+
+== 421. Fixed formatting problem with randart descriptions
+
+== 422. Changed slaying to be a little less powerful.
+
+== 423. Butchering with bare hands and a short blade in slot a doesn't
+switch back to bare hands. (Naturally, I'm using the experimental
+auto switch when butchering -setting.)
+
+== 424. mons_speed() should be extern, remove static declaration from mon-util.
+
+** 425. I have a ring of Baldness that somehow got cursed and now I am
+stuck with it. Scrolls of remove curse have no effect.
+Its not bad ring, but the increased metabolism isn't nice.
+
+== 426. More inventory problems:
+while playing 4.0.0b16 I found two bugs:
+1) when picking up items from the floor, after picking them up - it says "no
+more items" (but it picks up the item). This bug is strange it happens only
+at the very beginning of the game. For some reason after descending to Level
+2 it has stopped from happening.
+
+2) picking up items from the same type: when you have say 2-chokos and there
+is on the floor another one then when you stand on top of it - it says
+3-chokos(it takes into account the ones you have in your inventory). Or the
+other solution is that when you pickit up from the floor it replaces your
+previous chokos with the last amount of that type picked up. (Because I had
+2 chokos and after picking 3 chokos = I got 3, so it could be either
+problem...dunno)
+
+== 427. Fix descrip. for rings of slaying.
+
+== 428. I met monsters with infinite potions. I hope it's also fixed.
+
+== 429.
+ in monstuff.cc::handle_nearby_ability() should be also handled
+ monsters behaviour - BEH_WANDER and BEH_SEEK, beacuse monsters speak
+ even if they don't know about player. Also it looks that Giant
+ eyeball can stare at player even if he isn't noticed (or if he is
+ invisible, but it's probably feature)
+
+== 430. Michal's patch (new unrands?)
+ >> mv: now included - not only unrands but mainly clean-ups and minor upgrades
+
+== 431. In view.cc:viewwindow2() was buffy changed from unsigned char to
+ unsigned short (I'm talking about
+ FixedVector <unsigned char, BUFFER_SIZE> buffy).
+ But at least with my compiler it doesn't work and viewwindow2()
+ doesn't show anything (only black screen). When I changed buffy back
+ to unsigned char it started to work again.
+
+== 432. Giant eyeballs no longer stare at friends.
+
+== 433. You throw a dart.
+ You throw a dart.
+ You throw a poisoned orcish dart.
+ You shoot a poisoned needle.
+ You shoot a poisoned needle.
+ You hear a grinding noise.
+
+ ... with a dex 18 / darts 7 / throwing 4 player!
+ This is repeatable, and at times, I managed to
+ clear a rock wall with just two needles!!! Couple
+ this with the durability of needles, and players
+ have a poor-man's dig spell at their disposal.
+
+== 434.
+I think I will change this condition so that a
+ monster with no ammo won't bother picking any up,
+ unless their melee attack really sucks.
+
+== 435.
+ You destroy the shapeshifter zombie!
+
+ I sneak up on a defenseless cockroach and crush it with
+ my quarterstaff, only to be messaged that my character's
+ stabbing skill has increased. Is is just me, or does the
+ idea of stabbing with a quarterstaff seem a bit off? I
+ weakly suggest changing the name of the skill to something
+ less tied to impaling weapon types. "Ambush" skill or
+ "Bushwhack" skill or something similar.
+
+>> no more shapeshifter zombies. Improved messaging for stabbing.
+
+** 436.
+
+
+ Hi,
+
+ Could you add a description of the / and * keys to the help screen? Keypad is
+ not always useable, especially not with ctrl and shift keys, this might help
+ some people. Patch attached.
+
+
+== 437.
+ Note the extra space before the period:
+
+ Methea's ghost stares at you . You feel cold.
+
+
+ This is a common construction used (I presume)
+ in mon_speak() [or whatever]. There should be
+ a comma placed after the verb ['begs' in this
+ case] for grammar's sake:
+
+ Methea's ghost begs "Please don't hurt me!"
+
+== 439.
+ Package: crawl
+ Version: 1:4.0.0beta16-1
+ Severity: minor
+
+ Another small upstream gameplay issue. In the context of a rat I had
+ summoned attacking a kobold which was wielding a poisoned dagger:
+
+ The rat hits the kobold.
+ The rat hits the kobold!
+ The kobold hits the rat with a runed dagger!
+ The rat looks ill.
+ You kill the rat!
+ That felt strangely unrewarding.
+ The rat's corpse disappears in a puff of smoke!
+
+ The rat was killed by the kobold (via poison), not by me, but the messages
+ seem to indicate I killed it.
+
+ This may be very tricky to reproduce, unfortunately :(
+
+== 440.
+> * removed: no more spellcasting wanderers, until such time as we
+> have some reasonable "hedge magic", which I will not add before
+> release.
+
+ A healthy percentage of my wanderers still start out with magic
+ skills.
+
+ >> but not spells.
+
+
+== 442. Repel undead doesn't seem to actually repel the undead.
+
+ >> mv: fixed
+
+== 443. The enslaved stay enslaved even when you attack them.
+
+== 444. Change 'points' to 'point' if points needed == 1 in 'C' message
+
+== 445.
+This is me and a summoned zombie vs. a goblin:
+
+ You miss the goblin.
+ The goblin hits you with a club!
+ The giant cockroach zombie misses the goblin.
+ The goblin fails to defend itself.
+ You kill the goblin!
+
+>> very possible. Goblin was concentrating on the cockroach (lucky
+you!)
+
+== 446. Add ???'s patch for FreeBSD support
+
+== 447. Zombie generation hangs in the various hells, the crypt, and probably
+ slime pits, ecu. temple, and others.
+
+ >> think I got all cases of levels with no zombifiable native life.
+
+== 448. Monster polymorph can hang in HoB:
+ >> only valid monster for poly in HoB is Dancing weapon, which is EXPLICITLY
+ NOT a valid poly target. So it hangs. Duh!
+
+== 449. Shapeshifters no longer gain the extra abilities (spells, specials)
+ of their forms (they used to - I considered this a bug).
+
+== 450. Incredibly, monster enchantments were not being reset when a new level
+ was generated. This is an absolute showstopper and has probably corrupted all
+ games in progess. Most notable with permanent enchantments like shapeshifter -
+ this is what caused the "shapeshifter" dancing weapons that Josh (indirectly)
+ reported.
+
+** 451. As you read the scroll, it crumbles to dust.
+Your club glows black for a moment.
+Drop which item?
+You drop a +0 dwarven hand axe.
+You are empty-handed.
+
+-- 452.
+I hit an assert failure after reading a scroll of curse armour. From the
+traceback, we see an immediate problem at the call to itemname::in_name()
+at line 3358 of item_use.cc. The object to be named is -1.
+#6 0x80b1797 in in_name (inn=-1, des=4 '\004',
+ str_pass=0x825b9a0 "a +1,+0 elven long sword") at itemname.cc:69
+#7 0x80b125b in read_scroll () at item_use.cc:3358
+#8 0x8050e2d in input () at acr.cc:880
+
+Doing a quick compare between the pr16 & pr17 code, I think this line:
+ ok_to_curse[i] == (you.equip[i] != -1
+ && you.inv_plus[you.equip[i]] < 130);
+
+should be:
+ ok_to_curse[i] = (you.equip[i] != -1
+ && you.inv_plus[you.equip[i]] <= 130);
+
+** 453.
+DOS, 486sx
+4.1.16 Floating above a (dart) trap discovers it but gives no message.
+
+ I'd like to see a message when Coronas wear out.
+
+ >> mv: added
+
+4.1.17 Loading the game; Okawaru says: Welcome, disciple.
+
+A monster called "a human" was displayed as a darker (non-visible)
+ floor tile.
+
+ >> mv: fixed
+
+
+** 454 .Goblins and orcs still get infinite potions of healing??
+
+** 455. I'm playing Crawl pr17 (I double-checked this time) under Solaris, and I just
+got the "Too many items" bug with a minotaur monk. It had to do with a
+cursed runed leather armor that I was carrying. I had a bunch of stuff in
+my inventory, and read a scroll of detect curse (this is how I discovered
+that the armor was cursed). So I dropped the armor and moved to another
+spot. There I dropped some weapons that I wasn't interested in. I stepped
+back to this spot later, there's a cursed runed leather armor. There's also
+a cursed runed leather armor on the spot where I actually dropped it. I
+picked one up and dropped in on the other, looked, and "Too many items." The
+game hung when I tried to save. :^/
+
+** 456. I was playing the same minotaur monk (I was able to salvage the game) when I
+saw what I thought was a statue (an '8'). When I looked at it, I saw:
+
+You see 26 !questionable item (c100,t0,p0,p(2)0,d0:q26)s here.
+
+** 457.
+I was wandering along when I met a hobgoblin. I kill him and decide to pick
+up his weapon to see if it's good. I then get "do you want to pick up
+hobgoblin corpse (y/n/a/q)"(or something like that). I type no. "do you
+want to pick up hobgoblin corpse" No. "do you want... " no ad nauseum. I
+give up and press q the game crashes. I restart and load the autosave.
+Same thing happens. I this time press a and get
+x - a hobgoblin corpse
+x - a hobgoblin corpse
+x - a hobgoblin corpse etc
+It won't stop doing that
+
+Yours
+
+William Hull
+
+Another one:
+at another time there was this situation:
+
+###
+@g! the potion is yellow
+###
+
+###
+@!! after killing the goblin,a second yellow potion appeared
+###
+
+but walking over both just gave me the msg "m - a yellow potion" twice.
+afterwards i had just one yellow potion in my pack.
+
+(more)
+
+The item bug (duplicate items and potential lockup) seems to happen whenever
+a monster picks something up off the floor. The most recent incident is
+typical (at least in my games).
+
+
+ #'####
+ #!
+ # ###
+ #K#
+ #
+ <@ ###
+
+Near the door is an emulsified red potion. After I kill the kobold (who had
+previously been wandering around, i.e. he wasn't asleep), I find that he was
+carrying an emulsifed red potion. Coincidence? I think not. In this
+instance, I left the potion where it was sitting and checked out the potion
+near the door. Underneath the potion is a kobold corpse. I go up the stairs
+to the previous level, then return; the corpse and potion near the door are
+gone. From previous experience, I know that picking up both potions/corpses
+would have left me with just one potion/corpse in my inventory (assuming I
+didn't have any before), and picking up one potion/corpse and dropping it
+on top of the other potion/corpse will create the "Too many items" bug, and
+cause the game to hang when saving the level.
+
+(more)
+
+Sorry to follow up on my own post, but I was browsing through the sources and
+I noticed that in pickup() in items.cc, relink_cells() is called after the
+player successfully picks up an item off of the floor. No such function is
+called in handle_pickup() in monstuff.cc. Perhaps handle_pickup() should
+call relink_cells() (which we know works) instead of trying to update the
+igrd array itself.
+
+
+-- 458. My char with some stabbing skill stabbed a mimic wich was nerly dead
+after many rounds of battle. I know there is bonus when attacking a
+fleeing moster, but mimics cannot flee.
+
+>> fixed. Immobile monsters cannot flee.
+
+** 459. An artifact weapon of holy wrath does allow a demonspawn to wield it, wich
+is bug or maybe not.
+
+** 460. ..to Sif Muna, so I went back to the Temple and converted. Little did I know
+that Vehumet would hold a grudge. I survived a blue demon, an abomination,
+and several magical blasts, but Vehumet eventually blasted me when I was low
+on HP and did me in. *sigh*
+
+Anyway, here's the buglet: the high score list claims that my character was
+killed by bad targeting.
+
+-- 461. There is another one in monstuff.cc in handle_scroll when checking for
+negative numbers of scrolls...
+And yes it would be cool if they removed all the warnings (or at least
+most of them). Removing unused variables would be a first step.
+
+>>
+
+** 462. In the dos binary of Crawl 17, when running the game with "crawl -plain"
+option, the game screen is totally black. I still get the player statistics
+and messages, but the map display that you normally see is blacked out.
+
+This is bad because the normal crawl display (without -plain) is a bit buggy
+for me. (no cursor under the character). I also kinda prefer the #
+character for walls (got used to ADOM) :)
+
+xx 463. Beam tracers: tweak to take into account what might happen if they _miss_.
+
+** 464. Level draining can cause -1/-1 -magic when used against ogre (or maybe
+troll) character.
+
+== 465. Automatic weapon change when dissectiong gives a litle funny messages when
+berserk:
+Switching to your swap slot weapon.
+You are too berserk!
+Maybe you should try using a sharper implement.
+Switching back to a - the uncursed great mace "Res".
+
+ >> mv: fixed
+
+xx 466. My deep elf summoner cast summon demon from a staff of summoning (A
+great item for a starting summoner.), and received an orange demon,
+which proceded to attack me. None of the other demons had attacked. Is
+this a bug, or is there some way to make demons hostile?
+
+>> 1 in 4 chance of hostile demon.
+
+-- 467. Ettins have no description. I just met an elf and I think those should only
+appear as corpses. It had description "A monster whose description has yet
+to be written.".
+
+
+== 468. Invalid polymorph targets (this has been reported several times).
+ There are several generic monster types which are _not_ valid poly.
+ targets: 'human' and 'elf' being two of the more common results when
+ polymorphing stuff. And yet, 'human' should probably be given some
+ generic statistics and then allowed as a target (it makes sense, after
+ all).
+
+>> mv: fixed now
diff --git a/crawl-ref/docs/obsolete/messlog.txt b/crawl-ref/docs/obsolete/messlog.txt
new file mode 100644
index 0000000000..d04ae19f83
--- /dev/null
+++ b/crawl-ref/docs/obsolete/messlog.txt
@@ -0,0 +1,562 @@
+CHANGES TO pr31:
+
+
+
+* #defines MWATER6-10 (values 436 - 440) removed, unused in code, not needed and there is no point in reserving space for nonexistent monsters
+* #defines for MLAVA4,5,6,7,8,10 (and MLAVA10 should really have been MLAVA9, anyway), values 424-429, removed -- now unneeded, unused in code anyway.
+* #ifdef'd (USE_DEBRIS_CODE) enum DEBRIS -- really have to look at how this is implemented now!
+* ATTR_LAST_ATTR -> NUM_ATTRIBUTES
+* BEAM_CLOUD -> BEAM_ACID on strength of evidence in plant_spit() and zappy(), but now stinking_cloud() looks odd ... hmmm
+* DEBRIS_LAST -> NUM_DEBRIS
+* DNGN_TRAP_I -> DNGN_TRAP_MECHANICAL; DNGN_TRAP_II -> DNGN_TRAP_MAGICAL
+* ENCH_LAST_ENCH -> NUM_ENCHANTMENTS
+* FOOD_LAST -> NUM_FOODS
+* GOD_LAST_GOD -> NUM_GODS
+* GOOD_LAST_GOOD -> NUM_GOOD_THINGS
+* KILLED_LAST_KILLED -> NUM_KILLBY
+* MH_NORMAL -> MH_NATURAL, H_NORMAL -> H_NATURAL ... may want to add in {M}H_MAGICAL for creatures that are mortal though magical ...
+* MI_LAST_MI -> NUM_MISSILES
+* MONS_LAST_MONS -> NUM_MONSTERS
+* MONS_SMALL_SKELETON -> MONS_SKELETON_SMALL; MONS_LARGE_SKELETON -> MONS_SKELETON_LARGE; removed #defines in enum.h that josh added to achieve similar effect
+* MS_LAST_MS -> NUM_MONSTER_SPELLS
+* NAUGHTY_LAST_NAUGHTY -> NUM_NAUGHTY THINGS
+* OBJ_LAST_OBJ -> NUM_OBJECT_CLASSES
+* POT_LAST_POT -> NUM_POTIONS
+* SCR_LAST_SCR -> NUM_SCROLLS
+* SHOP_LAST_SHOP -> NUM_SHOPS
+* SK_LAST_SK -> NUM_SKILLS
+* SPELL_LAST_SPELL -> NUM_SPELLS
+* SPELL_MANNA and spells4::cast_manna() struck from the code, along with all supporting tie-ins
+* SPWPN_LAST_SPWPN -> NUM_SPECIAL_WEAPONS
+* STAFF_LAST_STAFF -> NUM_STAVES
+* SYM_SPORE -> SYM_BURST, as it is used all over the place for things other than spores
+* TOTAL_CARDS replaced with enum meber NUM_CARDS
+* TRAN_LAST_TRAN -> NUM_TRANSFORMATIONS
+* Vehumet will no longer shield one's intelligence when casting SUMMON_HORRIBLE_THINGS -- made no sense that he did in the first place
+* ZAP_LAST_ZAP -> NUM_ZAPS
+* a lot of cleanup/compaction in itemname.cc
+* a lot of general clean-up
+* a lot of mpr() clean-up
+* ability::show_abilities() made static
+* ability::species_ability() -> activate_ability()
+* abyss::generate_area() recoded for efficiency in selecting replacement tiles
+* abyss::priest_spells() -> player::priest_spells() and commented out, declaration from abyss.h moved to atop player.cc and also commented out -- part and parcel of above reasoning
+* added "you.redraw_hit_points = 1" to calc_hp() -- caught a number of instances where it was not being set
+* added #define ENDOFPACK for max size of player backpack
+* added #undef MAX to macro definition in it_use3::reaching_weapon_attack()
+* added CANNED_MESSAGES and stuff::msg_something_appears -> stuff::canned_msg() with appropriate parameter
+* added DARM_PLAIN to fill out ARMOUR_DESCRIPTIONS enum
+* added DNGN_LAST_SOLID_TILE to track this value's usage ... wish me luck
+* added DWPN_PLAIN
+* added MDSC_NOMSG_WOUNDS for monsters that do not message wound status to player
+* added MONSTER_DESCRIPTORS and monstuff:monster_descriptor() to handle usage
+* added MSG_SPELL_FIZZLES to stuff::canned_msg()
+* added NUM_TRAPS and TRAP_RANDOM
+* added OBJ_RANDOM
+* added OBJ_UNASSIGNED
+* added SHOP_UNASSIGNED and SHOP_RANDOM
+* added SPARM_RANDART_I
+* added STAT_ALL to deal with royal jelly, etc.
+* added TRAP_UNASSIGNED
+* added a number of CANNED_MESSAGES and handling by stuff::canned_msg()
+* added and implemented newgame::jobs_hpmp_init()
+* added declaration for monstuff::handle_behavior() atop file
+* added declaration of monstuff::flag_ench() atop monstuff.cc -- no idea why there wasn't one
+* added enum DIRECTION and applied members to codebase
+* added enum GENUS_PLAYER and started population of the enum for cases
+* added enum MONSTER_INVENTORY_SLOTS and applied members to codebase
+* added enum PLAYER_DESCRIPTORS
+* added enum SPECIAL_ROOMS and applied to codebase
+* added food::make_hungry(int bool) to streamline hunger decrements and messaging
+* added itemname::is_demonic() and applied to codebase -- probably should be expanded at a later date as more demonic items are introduced
+* added itemname::launched_by() which returns the appropriate missile subtype for a given weapon[launcher] subtype and implemented into code -- this will probably have to be reworked
+* added itemname::launches_things() which simply returns whether or not a WPN_foo launches other objects or not
+* added message to spells2::cast_toxic_radiance() for cases where light passes through invisible monsters
+* added misc::trap_at_xy() to handle determination of "which trap" for a given (x,y) coordinate
+* added misc::trap_category() to return grd[][] symbol for a given env.trap_type[]
+* added monstuff::message_current_target() for multiple instances of same messaging -- seemed the best place to stick it
+* added monstuff::monster_index() to return index value of a given monster pointer
+* added monstuff:heal_monster() and applied to codebase
+* added monstuff:hurt_monster() and applied to codebase
+* added monstuff:monster_habitat() to determine native habitat of creatures without resorting to range checking on MONSTERS enum -- better future flexibility
+* added mstruct::mons_itemuse() to replace global array gmon_use[1000] -- too much memory wasted there
+* added newgame::enterPlayerName()
+* added newgame::give_basic_knowledge()
+* added newgame::give_basic_spells()
+* added newgame::openingScreen()
+* added newgame::verifyPlayerName()
+* added player::dec_hp() -- probably should be inline or macro -- to unify handling decrementing of hp and catch error of not setting redraw to 1 (!!!)
+* added player::dec_mp() -- probably should be inline or macro -- to unify handling decrementing of mp and catch error of not setting redraw to 1 (!!!)
+* added player::decrease_stats() -- yes, I know that decrease_stats() and increase_stats() could be merged, but I'm too tired to do it now
+* added player::deflate_hp() to catch possible redraw bugs
+* added player::enuf_hp() to clarify ability.cc
+* added player::enuf_mp() to clarify ability.cc
+* added player::inc_hp() to catch possible redraw problems and bounds checking
+* added player::inc_mp() -- probably should be inline or macro -- to unify handling incrementing of mp and catch error of not setting redraw to 1 (!!!)
+* added player::job_title() and implemented
+* added player::player_descriptor() -- plan on future expansion
+* added player::reset_hp() to catch possible redraw problems
+* added player::set_hp() to catch possible redraw bugs
+* added player::set_mp() to catch redraw problems and to clarify coding
+* added player::species_abbrev() to stand in place of code in ouch::ouch()
+* added spellbook::spelltype_name() to permit recoding of certain portions of code as loops!!! (see: spells0.cc, spellbook.cc) - maybe should be moved elsewhere - output not in traditional order, but does it matter? -- cf. chardump::spell_type_name() -- grrrr!!!
+* added spells0::set_spellflags() to handle routine tasks
+* added spells0::spell_enhancement()
+* added spells0::spell_type2skill()
+* added static enum CARDS to decks.cc -- only used within this file -- and applied
+* added stuff::canned_msg(MSG_SOMETHING_APPEARS) to handle frequent use of set message: "Something appears at your feet."
+* added stuff::index_to_letter() and applied across codebase
+* added stuff::player_can_hear() to handle silence checking for both a distant (x,y) coordinate and the player's own coordinate
+* added stuff::random_colour() to generate a random color -- clarifies usage of particular calculation, prefer overhead of function to macro definition -- and applied to codebase
+* added view::mons_near_2() as future replacement for view::mons_near() -- takes a pointer rather than an index
+* anything relating to #ifdef CLASSES has been pulled out of the codebase -- it was never defined (or undefined for that matter), the code was out-of-date, got in the way of the actual operating code, and there is was a note dating all the way back to version 3.10 stating all this and more -- hope no one will miss it
+* applied stuff::yesno() to codebase -- a couple more complicated instances can use application
+* bang::explosion() now takes into account monster clouds as well as player clouds for "sizzle"
+* bang::explosion() now takes struct bolt * instead of struct bolt[] as second parameter
+* bang::explosion1() now takes struct bolt * instead of struct bolt[] as only parameter
+* beam::beam() now takes struct bolt * instead of struct bolt[] as only parameter
+* beam::check_mons_magres() returns bool instead of int
+* beam::check_mons_magres() takes struct monsters * instead of int as first parameter
+* beam::check_mons_resists() now takes struct bolt * instead of struct bolt[] as second parameter
+* beam::check_mons_resists() takes struct monsters * instead of int as second parameter
+* beam::mimic_alert() now takes struct monsters * instead of int as parameter
+* beam::missile() now takes struct bolt * instead of struct bolt[] as first parameter
+* beam::mons_ench_f2() no longer takes the second parameter (int foo[]) -- completely uneccesary, as it can be passed directly to the bolt struct
+* beam::mons_ench_f2() now returns bool instead of int -- not that the return value is ever used elsewhere
+* beam::mons_ench_f2() now takes struct bolt * instead of struct bolt[] as third parameter
+* beam::mons_ench_f2() takes bool as second parameter instead of char
+* beam::poison_monster() now takes struct monsters * instead of int as parameter
+* beam::poison_monster() takes bool instead of char for second parameter, renamed from "source" to "fromPlayer" and values reversed in passes (as it actually was t/f on fromMonster, but double m's looked silly)
+* beam::sticky_flame_monster() takes bool instead of char for second parameter -- no idea what it really means, as the function is called but once and the parameter ("source") is set to false
+* beam::tracer_f() now takes struct bolt * instead of struct bolt[] as second parameter
+* beam::tracer_f() now takes struct monster * instead of int as first parameter
+* bugfix (again): mummies get "closer to death" at levels 13 and 26
+* bugfix (of sorts): wizard commands 'x' and '$' no longer add to experience and call level_change() directly, but rather call gain_exp() instead -- these commands should still be bound by experience limits imposed by player::gain_exp()
+* bugfix in beam::beam() referenced menv[0] when menv[o] was meant ... cripes (!!!)
+* bugfix(?): items::handle_time() now forces one to exercise stealth -or- armour ... the original coding was a little odd (players with no or light armor had less of a chance to exercise stealth than those with heavier armour) -- but the intent seemed to be to make this tradeoff ... can't be stealthy in plate (unless elven), don't even try ... will potentially boost learning of armour skill by not wasting xp on stealth practicing. -- odds collapse on stealth practicing is 1 in 18 ... cf. to armour, which is 1 in 6 -- does that seem right, because that was the way it was and still is.
+* bugfix(minor) monstuff::monster_move() now cases monster clouds as well as player clouds for determination of safe move
+* bugfix/added itemname::hide2armour() and applied to codebase -- includes STEAM_DRAGON_HIDE, which had for some reason been overlooked in certain routines in dungeon.cc
+* bugfix/kinda: mstuff2::mons_trap() rewritten for better handling, silence checks for Zot trap, etc.
+* bugfix: (I think this was the case) warning message for followers of good gods weilding demonic weapons now outputs upon wield regardless of how special the item is
+* bugfix: I think I got the "off-by-one" for the Overmap error fixed
+* bugfix: NAMED_WEAPONS now begins at 181 and not 581 [josh admits fault here]
+* bugfix: [Daniel] SPWPN_FLAMING -> SPWPN_FLAME and SPWPN_FREEZING -> SPWPN_FROST for missile weapons in dungeon::items()
+* bugfix: abilities exercised by monsters in monstuff::handle_nearby_ability() were often dependent upon whether or not the monster was visible to the player -- which is stupid, a monster should stare at you (for example) regardless of whether you can see it
+* bugfix: ability case for ABIL_TO_PANDEMONIUM was only checking for 4 magic points when ability costs 7
+* bugfix: acr::input() -- changed "if ( you.duration[DUR_WEAPON_BRAND] > 0 )" to "if ( you.duration[DUR_WEAPON_BRAND] > 1 )" and else-if'd the ( you.duration[DUR_WEAPON_BRAND] == 1 ) -- as coded before, brands would jump from 2 to 1 to 0 in one call to input() -- just plain wrong!
+* bugfix: acr::input() -- changed instances of "if (foo > 1) foo--; if (foo == 1) foo = 0;" for durational things to "if (foo > 1) foo--; else if (foo == 1) foo = 0;" so that durational values of 2 would mean "two turns left" and not "expire now" as the code actually worked
+* bugfix: added #include <string.h> atop spell.cc {Brent}
+* bugfix: added bounds checking to dungeon::check_doors()
+* bugfix: added descriptor strings for transformation states missing from chardump::dump_char()
+* bugfix: added josh's acquirement book bugfix to dungeon::items() [Josh]
+* bugfix: applied SPTYP_RANDOM to appropriate spells::miscast_effect() calls and added appropriate code to spells::miscast_effect() -- much easier to change later, now
+* bugfix: bang::explosion1() had the potential to dump out duplicate lines from info[] due to careless placement of mpr() calls
+* bugfix: calls to "miscast_effect(10+random2(15), ...)" changed to "miscast_effect(10+random2(14), ...)" as there is no SPTYP_foo value assigned to 24!
+* bugfix: ditto for spells4::tame_beast_monsters()
+* bugfix: dungeon::build_minivaults() would attempt to build an undefined vault 1 out of 34 times ... no idea whether it would cause the game to hang, but not good to do that
+* bugfix: dungeon::give_item() was placing scrolls in the potion slot of monsters -- cripes (!!!)
+* bugfix: dungeon::hide_doors() fixed to not reference things outside bounds of grd[][]
+* bugfix: dungeon::items() for OBJ_WEAPONS was going off a value of 0 [no descrip] and not 3 [DWPN_ORCISH] in disallowing orcish weapons of orc slaying or holiness
+* bugfix: dungeon::items() was not generating the last four spellbooks (Josh's additions) -- it is now
+* bugfix: effects::forget_spell() would only check to "forget" spells in range of [0,19] and not [0,24], the full range of you.spells[] - and infinite loop check rewritten so as not to be probabilistic itself (!!!)
+* bugfix: eliminated references to feet for players who are centaurs
+* bugfix: fight::jelly_divide was locating suitable spots for the new jelly thusly:
+ "if ( mgrd[parent.x + jex][parent.y + jey] == MNG && mgrd[parent.x + jex][parent.y + jey] > 10 && ( parent.x + jex != you.x_pos || parent.y + jey != you.y_pos ) )"
+ the second grid check should be against grd[][] and not mgrd[][] -- the way it is coded, the second conditional is automativally satisfied by the first (MNG > 10) !!!
+* bugfix: fight::monster_polymorph() will only message the transformation if the player is near, the monster is visible or player can see invisible (before, messaging would only check for first case, and would do the strcpy/strcat regardless, only putting mpr() within a conditional)
+* bugfix: fight::you_attack() change in to hit bonus for sure blade changed from "5 + random2(10)" to "5 + random2limit(you.sure_blade, 25)" [Daniel] and changed messages in player::display_char_status()
+* bugfix: food::eating() case FOOD_PIZZA to properly display the "Mmmm..." string prior to the name of player's favorite kind of pizza
+* bugfix: for some reason Red Draconians were the only Draconians that did not get a tailslap attack in fight.cc -- now they do
+* bugfix: general change of "if (mons_near(o) && menv[o].enchantment[2] != ENCH_INVIS)" to "if (mons_near(o) && ( menv[o].enchantment[2] != ENCH_INVIS) || player_see_invis() ) )" -> simple_monster_message() where appropriate and some bugfixes with where checks were not applied against messages
+* bugfix: in abilities, moved some spells cast to positions prior to exercising so players would not get potential skill increase (and application) during act of casting
+* bugfix: in acr::input() you.delay was decrementing from 2 to 0 ... fixed by making an if-else rather than if-if situation
+* bugfix: in beam::beam() wand_id for LIGHTGREY (TELEPORTATION), WHITE (DISINTEGRATION), LIGHTRED (ENSLAVEMENT), BEAM_SLEEP only set to 1 for monsters that player can see
+* bugfix: in dungeon::plan_3() it was calling clear_area() to replace DNGN_FLOOR with DNGN_FLOOR -> should have been replacing DNGN_ROCK_WALL with DNGN_FLOOR {linley}
+* bugfix: in dungeon::plan_4() it was calling clear_area() to replace DNGN_FLOOR with DNGN_FLOOR -> should have been replacing DNGN_ROCK_WALL with DNGN_FLOOR {linley}
+* bugfix: in fight::monster_die() for case KILL_RESET cloud was only being placed if monster was near player
+* bugfix: in mstuff2::mons_cast() menv[0] was being referenced, preventing monster abjuration for spells MS_LEVEL_SUMMON, MS_SUMMON_DEMON, MS_SUMMON_UNDEAD, and MS_SUMMON_DEMON_GREATER
+* bugfix: in skills::exercise2() fixed determination of which skills impact recalculation of certain stats and/or forced redraws
+* bugfix: it_use2::unwear_armour() removed message checking for SPARM_COLD_RESISTANCE -- no real check for "lowered" resistance [how to save state w/o recalling player_res_foo()? problem with "stateless" resistances!]
+* bugfix: item_in_shop() no longer generates items of type OBJ_UNKNOWN_I or OBJ_UNKNOWN_II
+* bugfix: items::add_items() calculations for item_weight recoded to take advantage of itemname::mass() properly and permit Josh's USE_LIGHTER_MAGIC_ITEMS modification -- screwy it was
+* bugfix: message in player::display_char_status() for sure_blade now based on you.sure_blade and not you.confusing_touch [Daniel Ligon]
+* bugfix: messaging for spells2::holy_word() would only happen for invisible monsters for players unable to see invisible !!! (d'oh!)
+* bugfix: messaging screwed-up for monstuff::handle_potion() -- also, would only quaff potions of invis or haste iff not near player (latter makes little sense)
+* bugfix: misc::manage_clouds() now handles monster clouds, too.
+* bugfix: misc::in_a_cloud() for MIASMA cases was doing "double damage" by decrementing hp directly, then calling ouch (which does the same)
+* bugfix: monster flying over trap message was copied into info but never output by mpr()
+* bugfix: mstuff2::mons_throw() was checking against MSLOT_MISSILE instead of MSLOT_WEAPON in determining whether monster was in fact using a missile launcher (I think that was a bug)
+* bugfix: mstuff2::mons_throw() was checking against a value of 120 (not possible, AFAIK) and not DWPN_ELVEN in providing a to-hit bonus to the use of elven missile launchers
+* bugfix: mstuff2::monster_teleport() messaging was occurring for nearby monsters that were either visible or in the presence of a player that could not see invisible -- odd
+* bugfix: no description was output for runes of zot if id level was 0 (actually, would output debug string)
+* bugfix: no more messaging that a monster "almost triggered" a blade trap and no more revealing the trap, then -- makes no sense if it was "almost triggered" to perform either action
+* bugfix: player thrown missiles now match monster thrown missiles
+* bugfix: player::level_change() had mummies receiving "closer to powers of death" messages at levels 13 and 23 and not 13 and 27 as set in player::player_spec_death() [Daniel]
+* bugfix: related to above, gift timeout for YRED not set if he can't get a servant to you
+* bugfix: religion::lose_piety() did not have a message of losing ability to hasten self if follower of GOD_OKAWARU (piety > 120) or ability to receive minor healing (piety > 50) or ability of temporary might (piety > 30)
+* bugfix: repaired messaging for it_use3::box_of_beasts() to check to see whether a creature actually appears before saying one does (!!!)
+* bugfix: same as above for items::item_place()
+* bugfix: shopping::item_value() was going off a value of 6 [DARM_ORCISH] (and not 3 [DWPN_ORCISH]) when devaluing ocish weapons
+* bugfix: some possible messages were not being directed to player because of improper random limits being set in religion::Xom_acts()
+* bugfix: species selection screen in newgame::new_game() now starts with clrscr() call for all platforms -- was ugly under linux with just two EOLs output
+* bugfix: spells3::cast_selective_amnesia() will now return mana to player equivalent to the spell's cost ... looks like it was supposed to, but prior code did nothing at all
+* bugfix: spells3::entomb() did not destroy the traps it overwrote with walls - now, mechanical traps destroyed, magical traps retained
+* bugfix: spells4::cast_evaporate() was not messaging string constructed for "hands flaking" case
+* bugfix: spells4::make_shuggoth() could potentially have referenced menv[-1] -- fixed, but I still have to fix messaging
+* bugfix: spells4::passwall() attempts to reference areas outside the bounds of grd[][] -- still need to figure out what proper "borders" should be (see function)
+* bugfix: spells4::sleep_monsters() was using check_mons_magres() instead of !check_mons_magres() for condition where monster "saved" -- yes, I know it is a bit backward, but that is the code
+* bugfix: started applying GXM and GYM - caught instances where things were being checked/added/whatever beyond bounds of env.foo[][]
+* bugfix: the "Symbol of Immediate Regeneration" card was producing POT_HEALING effect, when it should have been generating a POT_HEAL_WOUNDS effect, according to the commented name of the card and the fact that there is already a Card of Healing
+* bugfix: dungeon::give_item() switched "(mitm.quantity[bp] == 0 || mitm.quantity[bp] == 100)" to "(mitm.quantity[bp] == 0 || mitm.base_type[bp] == 100)" as it should have been all along
+* bugfix: restore_foo() will no longer reset foo to foo_max in cases where foo >= foo_max -- don't know if it is the case, but may be at some point in the future
+* bugfixes: messaging based on create_monster() has been fixed to be dependent upon whether a monster actually appears -- probably did not get them all << checks spells2, spells3, and spells4 still >>
+* changed H_foo to MH_foo in spells4.cc (shame on you, Josh)
+* clean-up of mons_lev.cc
+* clean-up: player::player_AC() recoded as switch on species rather than bunch of if's -- too bad things weren't coded as species/subspecies to make working with draconians easier!!! (future change?)
+* cleaned up remaining "% 100" madness when it comes to cloud handling routines
+* cleaned-up cloud description coding in direct::look_around() -- last of the "foo % 100" coding, I think
+* cleaned-up dungeon::prepare_swamp() <again>
+* cleaned-up dungeon::prepare_water()
+* cleaned-up dungeon::vault_grid()
+* cleaning up my own bugs
+* codebase: it_use3 definition of "extern unsigned char show_green" removed - already in externs.h, which is included
+* codebase: moved spells4.cc and spells4.h to "unused" folder for the time being, removed spells4.o from makefile.obj list -- none of the functions in these files are called elsewhere
+* codebase: which_spellbook() definition moved from atop spells.cc to atop spellbook.cc -- it is only used there
+* commented out GOOD_ATTACKED_FRIEND in enum.h and only reference to it in fight::you_attack() -- not even accounted for in religion::done_good() so what the h*** is the point? way open to potential abuse if implemented, anyway. grumble, grumble.
+* commented out global char filenam[80] in dungeon.cc -- cannot find a single instance of usage
+* commented out global char save_file[9] in dungeon.cc -- cannot find a single instance of usage
+* commented out global char whole_line[80] in dungeon.cc -- cannot find a single instance of usage
+* commented out global char wm_1[5] in dungeon.cc -- cannot find a single instance of usage
+* commented out global char wm_2 in dungeon.cc -- cannot find a single instance of usage
+* commented out global int leng_str in dungeon.cc -- cannot find a single instance of usage
+* commented out global int old_x in dungeon.cc -- cannot find a single instance of usage
+* commented out global int old_y in dungeon.cc -- cannot find a single instance of usage
+* commented out global int rd in dungeon.cc -- only used in dungeon::specr_2() as near as I can tell
+* commented out global int x_fin and y_fin in dungeon.cc -- cannot find a single instance of usage
+* commented out global int x_max and y_max in dungeon.cc -- can only find variables local to dungeon::clear_area() that share these names
+* commented out globals int put_x and put_y in dungeon.cc -- cannot find a single instance of usage
+* commented out mstruct::def_letters() as the function is no longer being used anywhere
+* commented out stuff::output_value() - not used anywhere in the codebase
+* commented out unused gods in enum GODS and their unused altars in enum DUNGEON_FEATURES
+* completed ifdef of ABIL_GLAMOUR routines in abilities.cc -- josh didn't do it all the way through
+* created obj-weap.cc, corrected signage on parameters passed to some functions (char -> unsigned char)
+* deck_of_wonders[], deck_of_summoning[], deck_of_tricks[], and deck_of_power[] made static to decks.cc
+* decks::cards() made static to decks.cc
+* declaration for food::can_ingest() moved from food.h to atop food.cc -- internal to sourcefile
+* declaration for food::eat_from_floor() moved from food.h to atop food.cc -- internal to sourcefile
+* declaration for food::eaten() moved from food.h to atop food.cc -- internal to sourcefile
+* declaration for monstuff::simple_monster_message() moved from atop monstuff.cc to monstuff.h as it is now used in other sourcefiles
+* declaration of spells4::cast_detect_magic() moved from spells4.h to atop spells4.cc and commented out, along with actual function -- not in current usage
+* declaration of spells4::cast_eringyas_surprising_bouquet() moved from spells4.h to atop spells4.cc and commented out, along with actual function -- not in current usage
+* declaration of spells4::cast_summon_serpents() moved from spells4.h to atop spells4.cc and commented out, along with actual function -- not in current usage
+* declaration of spells4::do_monster_rot() moved from spells4.h to atop spells4.cc and commented out, along with actual function -- not in current usage
+* declaration of spells4::make_a_random_cloud() moved from spells4.h to atop spells4.cc
+* declaration of spells4::make_a_rot_cloud() moved from spells4.h to atop spells4.cc
+* definition of monstuff::handle_special_ability() added atop monstuff.cc -- no idea why it was not there already
+* definition of religion::divine_retribution() moved from religion.h to atop religion.cc
+* dungeon::item_in_shop() returns unsigned char instead of char, and takes unsigned char instead of char as sole parameter
+* dungeon::items() takes unsigned char instead of int for second and third parameters
+* dungeon::place_spec_shop() takes unsigned char instead of char for all three parameters
+* dungeon::plan_1() returns unsigned char instead of char
+* dungeon::plan_2() returns unsigned char instead of char
+* dungeon::plan_4() returns unsigned char instead of char
+* dungeon::plan_5() returns unsigned char instead of char
+* effects::direct_effect() now takes struct bolt * instead of struct bolt[] as parameter
+* effects::mons_direct_effect() now takes struct bolt * instead of struct bolt[] as first parameter
+* eliminated default parameter for spells3::cast_selective_amnesia()
+* enum: MUT_LAST_MUT reverted back to NUM_MUTATIONS ... to me, it is clearer to use NUM_foo rather than the particular enum prefix, as it denotes clearly that *this is not really a member of the enum, but rather a description of them* also for cases where LAST is not really last (see MONSTER_CATEGORIES), also removed related #define
+* enum: SPTYP_LAST -> NUM_SPELL_TYPES
+* enum: added SPTYP_RANDOM for use in spells::miscast_effect() -- I'd like to set to 255, but don't know how many things need to be switched to unsigned char to do so
+* enum: added SPWLD_PRUNE, SPWLD_HUM, SPWLD_CHIME, SPWLD_BECKON, SPWLD_SHOUT as per it_use3::special_wielded()
+* enumery and clean-up
+* enumery in describe.cc
+* enummed MH_foo where appropriate and changed inequalities to equivalence tests
+* etc. etc. on the messaging bugfixes
+* f(x): added food::hunger_warning() to break-out functionality from acr::input
+* f(x): spells::miscast_effect() returns bool instead of char
+* fight::jelly_divide() takes struct monsters * instead of int as parameter
+* fight::monster_die() takes struct monsters * instead of int as first parameter
+* fight::monster_polymorph() now returns bool -- whether the polymorphing took place or not -- needs to be more rigorous in determation of return value, though
+* fight::monster_polymorph() takes struct monsters * instead of int for first parameter
+* fight::place_monster_corpse() takes struct monsters * instead of int as parameter
+* fight::place_monster_corpse() takes struct monsters * instead of unsigned char as parameter
+* figured out proper inclusions for spells4.h throughout codebase
+* figured out proper places to #include items.h
+* files::find_spell() returns bool instead of char
+* files::load() now takes bool instead of char for 2nd, 3rd, 5th and 6th parameters
+* files::save_game() takes bool instead of char for only parameter
+* files::save_level() now takes bool instead of char for 2nd parameter
+* filpped first and second parameters to beam::check_mons_resists() -- makes more sense
+* finished putting in new spell struct, see spl-util.cc/.h and spl-data.h
+* first parameter to bang::explosion() renamed from ex_size to is5x5 to denote properly what it means -- changed to bool (as the f(x) only does 3x3 and 5x5 explosions now)
+* first two parameters to beam::mons_ench_f2() replaced by a single parameter of type struct monsters *
+* fixed a bug in dungeon::item_colour() which was not colouring namwed weapons properly
+* fully ifdef'd anything relating to elvish glamour
+* general clean-up
+* general clean-up
+* general clean-up
+* general clean-up
+* general clean-up
+* general clean-up
+* general clean-up -- trying to rid the codebase of goto statements here and there
+* general clean-up and enumery
+* general clean-up and enumery
+* general clean-up and enummery -- starting to unravel dungeon::give_item()
+* general clean-up and optimization in dungeon.cc -- starting to unravel the mysteries of dungeon.cc and all its glory!
+* general clean-up in monstuff.cc --> don't bother to strcpy()/strcat() if final mpr() dependent upon mons_near() -- *all* operations dependent on mons_near(), then !!!
+* general clean-up of religion.cc
+* general clean-up, mostly in dungeon.cc
+* general cleanup
+* general cleanup and enumery
+* general fixing of messaging for invisibility checks
+* general: indentation and enumming
+* global "int diag_door = 0" in dungeon.cc deleted -- only used and set within dungeon::make_room()
+* global "int max_doors" in dungeon.cc moved to atop dungeon::builder() -- only passed between builder() and make_room() -- which now takes an int [max_doors] and not "void" as parameter
+* global int band and band_no moved into dungeon::place_monster() -- only used within that function, near as I can tell
+* global int dir_x2 and dir_y2 moved into dungeon::make_trail() -- only used within that function near as I can tell
+* global int no_rooms moved into dungeon::builder() -- only used within that function near as I can tell
+* global int roomsize moved into dungeon::builder() -- only used within that function near as I can tell
+* global int x_start and y_start moved into dungeon::builder() -- only used within that function near as I can tell
+* global ints cx and cy in dungeon.cc moved into dungeon::specr_2(), only used there
+* global ints dx and dy in dungeon.cc moved into dungeon::specr_2(), only used there
+* global ints sx and sy in dungeon.cc moved into dungeon::specr_2(), only used there
+* got rid of the MLAVAfoo defines
+* got rid of the MWATERfoo defines
+* had to un-#ifdef the DEBRIS enum ... I want it gone, goddamn it!!!
+* heavy_armour modifier in fight::you_attack() for large species using large shields fixed at +1, and not potentially +3 -- reasoning that id ARM_SHIELD is +1 regardless for all races, ARM_LARGE_SHIELD should be equivalent modifier for large races (SHIELD :: SPECIES as LARGE_SHIELD :: LARGE_SPECIES), and besides, on average, large and regular/small species were getting the same modifier on use of large shields, which did not seem fair.
+* implemented newgame::give_last_paycheck()
+* implemented newgame::jobs_stat_init()
+* implemented wrapper f(x) religion::simple_god_message()
+* in monstuff:handle_wand() - monsters will no longer zap themselves with wand of invisibility if player can see invisible -- a cheat, I know, but every bit helps
+* invent::list_commands() now takes bool instead of int
+* it_use2:: zapping() <---> zappy() relationship worked out, parameters passed between them have changed
+* it_use2::zapping() now takes struct bolt * instead of struct bolt[] as last parameter
+* it_use2::zappy() made static
+* it_use3::ball_of_energy() made static
+* it_use3::ball_of_fixation() made static
+* it_use3::ball_of_seeing() made static
+* it_use3::box_of_beasts() made static
+* it_use3::disc_of_storms() made static
+* it_use3::efreet_flask() made static
+* it_use3::staff_spell() made static
+* item_use::eat_food() -> food::eat_food() -- just so I can keep everything together wrt food thingees
+* item_use::throw_it() made static
+* item_use::throw_it() takes struct bolt * instead of struct bolt[] as first parameter
+* itemname::is_a_vowel() now returns bool instead of char
+* items::conv_letter() -> stuff::letter_to_index() -- more descriptive of actual function, stuff more central for now
+* made global char is_a_specroom in dungeon.cc into a static variable -- not utilized outside this file
+* made global char oblique in dungeon.cc into a static variable -- not utilized outside this file
+* made global char oblique_max in dungeon.cc into a static variable -- not utilized outside this file
+* made global int bno_mons in dungeon.cc into a static variable -- not utilized outside this file
+* made global int corrlength in dungeon.cc into a static variable -- not utilized outside this file
+* made global int finish in dungeon.cc into a static variable -- not utilized outside this file
+* made global int intersect_chance in dungeon.cc into a static variable -- not utilized outside this file
+* made global int no_corr in dungeon.cc into a static variable -- not utilized outside this file
+* made global int time_run in dungeon.cc into a static variable -- not utilized outside this file
+* made global ints room_x1 and room_x2 in dungeon.cc into static variables -- not utilized outside this file
+* made global ints room_y1 and room_y2 in dungeon.cc into static variables -- not utilized outside this file
+* made global ints vsx and vsy in dungeon.cc into static variables -- not utilized outside this file
+* made global ints x_ps and y_ps in dungeon.cc into static variables -- not utilized outside this file
+* made several functions in mons_lev.cc static
+* made spells4:::yesno() accept lower-case responses, too
+* maintenance: removed curly-braces at end of lines to indented beginning of next line, as per coding standard
+* mass enumery of m_list.h and reformatting for legibility
+* minor bugfix in dungeon::items() -- demon tridents apparently forgotten in initial conditional to set special enchantments on weapons -- esp. given that they are singled out later in a nested conditional, added back in to parent conditional
+* minor bugfix in dungeon::items() -- many_many was being set from 351 to 200 when determing weapon specials, but a subsequent conditional was still relying on the value of 351, meaning fewer special weapons than the algortihm intended
+* minor bugix: reading scroll of summoning will only message if the creature actually appears
+* minor clean-up of dungeon::labyrinth_level()
+* minor tweak - fight::monster_polymorph() will no longer allow monsters to polymorph "in place" -- i.e. to the same type as they already are
+* minor tweak -- wand_id for polymorphing now dependent upon outcome of monster_polymorph()
+* minor tweak: monsters that drain hps and heal beyond current max hp will gain +1 max_hp in some circumstances {just to make things a bit more interesting}
+* misc::dart_trap() made static
+* misc::dart_trap() takes struct bolt * instead of struct bolt[] as first parameter
+* misc::itrap() takes struct bolt * instead of struct bolt[] as first parameter
+* misc::manage_clouds() now returns void instead of int -- since env.foo is externed, no need to pass back integer value to acr.cc
+* misc::manage_clouds() rewritten slightly to clarify logic of function
+* misc::trap_item() returns bool instead of int
+* mon-util::mon_init() scrapped and replaced by mon-util::mons_colour() -- let's see what the slowdown is
+* mon-util::mons_pan() -> mon-pick::mons_pan()
+* monstuff::distance() -> stuff::distance()
+* monstuff::handle_behavior() now takes struct monsters * instead of int as only parameter
+* monstuff::handle_enchantment() takes struct monsters * instead of int as parameter
+* monstuff::handle_movement() takes struct monsters * instead of int as parameter
+* monstuff::handle_nearby_ability() takes struct monsters * instead of int as parameter
+* monstuff::handle_potion() takes struct monsters * instead of int as parameter
+* monstuff::handle_reaching() takes struct monsters * instead of int as parameter
+* monstuff::handle_scroll() takes struct monsters * instead of int as parameter
+* monstuff::handle_special_ability() takes struct monsters * instead of int as parameter
+* monstuff::handle_spell() takes struct monsters * instead of int as parameter
+* monstuff::handle_throw() takes struct monsters * instead of int as parameter
+* monstuff::mons_in_cloud() now takes struct monsters * instead of int as parameter
+* monstuff::mons_pickup() made static monstuff.cc for the time being
+* monstuff::mons_pickup() returns bool instead of char -- it never returns anything other than false, is this intentional?
+* monstuff::mons_pickup() takes struct monsters * instead of int as parameter
+* monstuff::monster_blink() takes struct monsters * instead of int as parameter
+* monstuff::monster_habitat() takes struct monsters * instead of int as parameter -- had to create monplace::monster_habitat_2() as a workaround for one case for the time being
+* monstuff::monster_move() made static monstuff.cc for the time being
+* monstuff::monster_speaks() made static to monstuff.cc for the time being
+* monstuff::monster_speaks() takes struct monsters * instead of int as parameter
+* monstuff::plant_spit() now takes struct bolt * instead of struct bolt[] as only parameter
+* monstuff::plant_spit() takes struct monsters * instead of int as parameter
+* monstuff::print_wounds() now takes struct monsters * instead of int as parameter
+* monstuff::simple_monster_message() no longer requires first parameter, so it has been dropped
+* monstuff::simple_monster_message() returns bool intead of void to permit testing and outputting of alternate message <not implemented yet>
+* monstuff::swap_places() takes struct monsters * instead of int as parameter
+* monstuff:mons_in_cloud() and monstuff:plant_spit() made static to monstuff.cc for now
+* monstuff:monster() -- commented all lines having to do with variable no_mons -- it was initialized, decremented, and incremented, but never applied in the codebase
+* monstuff:monster_regenerates(foo) removed in favor of monstuff::monster_descriptor(foo, MDSC_REGENERATES)
+* more clean-up
+* more general clean-up
+* more general clean-up
+* more messaging fixes
+* more work toward completing determination of proper #includes for each file
+* moved enum DEBRIS from enum.h to atop spells4.cc -- not well-implemented yet, so buried there instead
+* moved some things from skills::exercise2() into skills::exercise() -- function could probably be folded in together, given the set value of deg ...
+* moved the #ifdef inside of spells4::silence() to clarify that it all applies to a single function
+* moved the FEATURE enum from overmap.h to atop overmap.cc -- no need to open it to use outside the file
+* mstuff2::dragon() now takes struct bolt * instead of struct bolt[] as second parameter
+* mstuff2::dragon() takes struct monsters * instead of int as parameter
+* mstuff2::mons_cast() takes struct bolt * instead of struct bolt[] as second parameter
+* mstuff2::mons_cast() takes struct monsters * instead of int as first parameter
+* mstuff2::mons_throw() takes struct bolt * instead of struct bolt[] as second parameter
+* mstuff2::mons_throw() takes struct monsters * instead of int as first parameter
+* mstuff2::mons_trap() takes struct monsters * instead of int as first parameter
+* mstuff2::monster_teleport() now takes struct monstes * instead of int as first parameter
+* mstuff2::spore_goes_pop() takes struct monsters * instead of int as parameter
+* much cleanup and compaction of religion.cc
+* newgame::new_game() now returns bool instead of char
+* optimization: some optimization of it_use3::special_wielded()
+* optimized mon-util::seekmonster() but odd things are happening (monsters on level 1 don't awaken and missiles may now appear to go through walls)
+* player::forget_map() takes unsigned char instead of char for sole parameter
+* player::how_hungered() -> food::how_hungered() added appropriate #include atop it_use2.cc
+* player::increase_stats() now can increase by more than one by adding a a third parameter for amount of increase
+* player::reset_hp() pulled in favor of more flexible player::set_hp()
+* player::species_name() takes unsigned char instead of char to match you.species
+* player::you_are_draconian() -> player::player_genus(), now uses switch (don't use comparatives!) and broadened to cover other cases
+* possible bugfix: fight::monster_polymorph() - first two parameters were of type unsigned char when they should have been of type int (MONS_foo definitely falls outside range [0,255]) -- also double-checked types of old_foo variables used within the function itself
+* propagated effects::lose_stat() throughout codebase
+* propagation of silenced() to cover instances of "You hear ..." messages << bang.cc -
+* pulled out all the code relating to MONS_TUNNELING_WORM and MONS_WORM_TAIL -- haphazard and deprecated (monster never appeared)
+* pulled out all the code relating to the QUOKKA, SWORD, GUARDIAN ROBOT, and DORGI -- all were deprecated a long time ago
+* recoded dungeon::special_room() for efficiency -- was filling monster arrays on each and every loop-through (sheesh!)
+* recoded monplace::mons_place() to do away with way too many calls to random2() in order to generate random nasty for dungeoneers heading downwards
+* recoded monplace::summon_any_demon() to make types more apparent and to remove calls to stuff::table_lookup()
+* recoded monstuff::print_wounds() for clarity of logic flow, got rid of that damn goto statement
+* religion::Xom_acts() now takes bool for first and third parameters
+* religion::god_name_long() commented out (but left intact) -- as jmf flagged, this function is not in use within the codebase
+* religion::god_name_long() struck from codebase -- relevant salvaged information now conveyed through comments
+* religion::god_speaks() no longer has a default parameter value -- confusing use of GOD_foo enum as it was
+* religion::naughty() now ordered by deity then by naughty -- makes more sense to be able to see naughty by deity rather than deity response by naughty
+* removed Isk's Cross garbage from spell::your_spells() -- no longer a spell, had been replaced by Symbol of Torment
+* removed MS_ZULZER -- only used by Dorgi ...
+* removed some useless typedefs from atop mon-util.h and randart.cc
+* removed the "guarantee knife" code in dungeon::builder() as per brent's suggestion
+* rename mons_lev -> mon-pick
+* renamed ability -> ply-abil
+* renamed levels -> lev-pand
+* renamed m_list -> mon-list
+* renamed mstruct -> mon-util
+* replaced C_foo defines with appropriate CE_foo enums
+* replaced H_foo defines with appropriate MH_foo enums
+* restructured monplace::create_monster() to get rid of the silly goto statements and clarify program flow
+* reversed the parameters passed to player::slaying_bonus() to align with PWPN_foo and applied enum function calls
+* rewrote a lot of ability.cc
+* rewrote effects::lose_stat() to be a bit more robust and now player_sust_abil() no longer fullproof protection against stat loss
+* ripped out mstruct::def_letters() -- no longer in use anywhere in the codebase
+* second parameter passed to ouch is now int instead of char -- typical of source code that it should be int and not anything else, as it refers to menv[foo]
+* set wield_change to a single type (it was used as a char, unsigned char, and int all over the place) -- I decided to make it type bool for clarity
+* shifted MH_foo and H_foo flags up one to start at 0 and include MH_HOLY at start -- should not be problematic
+* shopping::clear_line() removed entirely -- did not do anything but return upon being called
+* simple_monster_message() propagated throughout codebase
+* skills2::best_skill() now takes unsigned char instead of char for all three parameters -- it also now returns unsigned char instead of char
+* skills2::calc_ep() -> calc_mp() -- I always think of experience and not magic points when I see the f(x) - you.redraw_magic_points moved into f(x) and duplicate settings removed from codebase
+* skills2::skill_name() takes unsigned char instead of char for sole parameter
+* skills2::skill_title() no longer takes you.char_class as third parameter -- available globally and no longer utilized within the f(x) itself
+* skills2::skill_title() no longer takes you.experience_level as fourth parameter -- not utilized at all within function, meaningless pass
+* skills2::skill_title() takes unsigned char instead of char for its two remaining parameters
+* skills::exercise2() made static
+* some enumeration work
+* some enumery
+* some enumery and housekkeeping
+* some enummery and clean-up in files.cc
+* some fixing up in dungeon::item() -- knive will no longer be quite so common in the deeper parts of the dungeon (minor bugfix/tweak)
+* some general clean-up
+* some general clean-up
+* some more general cleanup
+* some restructuring of newgame.cc to clarify what is being done
+* spell::exercise_spell() second and third params now bool not int
+* spell::surge_power() made static
+* spell::your_spells() returns bool instead of char, third parameter (allow_fail) now bool not char
+* spellbook::spellbook_contents() returned unsigned char instead of char
+* spellbook_contents() declaration moved from spellbook.h to atop spellbook.cc - native only to file
+* spells0::spell_hunger() now takes only the first parameter - second parameter not used in function
+* spells0::spell_spec() no longer takes a second parameter -- it was never used !!!
+* spells1::identify() now takes a power parameter (currently unused) and a value of -1 flags it as coming from an item (in this case, a scroll)
+* spells1::spell_direction() takes struct bolt * instead of struct bolt[] as last parameter
+* spells2::manage_shock_shield() -> spells1::manage_shock_shield() and definition moved from spells2.h to spells1.h -- better fit here
+* spells2::restore_foo() [three functions] rolled into spells2::restore_stat() -- permits restoration of STAT_RANDOM now, which may be useful at some future point
+* spells2::summon_butter() -> effects::summon_butter() and definition moved from spells2.h to atop effects.cc (only used here)
+* spells3::aistrike() now returns a success value
+* spells3::cast_bone_shards() now returns a success value
+* spells3::cast_smiting() now returns a success value
+* spells3::create_noise() now returns a success value
+* spells3::create_noise2() renamed to spells3::create_noise() -- what happened to the other function?
+* spells3::death_channel() now returns a success value
+* spells3::entomb() now returns a success value
+* spells3::monster_on_level() made static
+* spells3::recall() now returns a [apparent] success value
+* spells4::cast_summon_large_mammal() -> summon_large_mammal()
+* spells4::cast_warp_brand() deleted -- does not conform to existing usage of brands in spell.cc
+* spells4::drop_everything() -> transfor::drop_everything(), declaration moved from spells4.h to atop transfor.cc -- only used here (for now), so just move it there, already
+* spells4::silenced() -> stuff::silenced()
+* spells4::yesno() -> stuff::yesno() <need to check includes again>
+* standardized somewhat the ordering of ability evaluation and effects when used in abilities.cc to make editing easier
+* started cleaning up maps.cc -- made everything static, moved old, unused vault maps to "unused" folder
+* started newgame.cc cleanup
+* started rectifying the global vars in dungeon.cc: int's rannum, randnum, & q deleted - border_type moved into builder() - lev_mons moved into place_monster() and special_room() - passout moved to place_monster() - char dung1 & dung2 deleted, set to random2(100) each in builder() but never used beyond that - skipped moved to builder()
+* starting clearing out oddball global variables in spellbook.cc: int's i, sc_read_1, sc_read_2; unsigned char keyin
+* stuff::magic_ability() folded into player::player_mag_abil() and the latter function now takes parameter as to whether or not to weight value by intelligence
+* stuff::magic_ability() no longer takes a second parameter
+* stuff::output_value() struck from the codebase -- not used anywhere
+* stuff::table_lookup() yanked -- I think I was trying to swat a fly with a sledgehammer originally
+* too much time spent cleaning-up ouch::item_corrode() but recoded nonetheless
+* tweak(minor) - jellies may now split upon eating secret / closed doors, and the types of jellies that do has been expanded
+* tweak/bugfix: airstriking your own tile causes spell to fizzle
+* tweak: all draconians now get a 20% lowering on breath failures if transformed into dragons -- should not affect much, as failure rates are already pretty low.
+* tweak: blinking in the abyss is a bit more difficult -- reordered the conditionals in spells1::blink() to place barring of teleport in abyss prior to merely interfering with it
+* tweak: in religion::pray() sustenance is now only provided by ZIN and ZIN only, as per discussion on onelist
+* tweak: it_use3::ball_of_seeing() and it_use3::ball_of_energy() now flow to confusion case from drain mana case when invoker has no mana at time of invocation
+* tweak: monstuff::handle_behavior() now picks a new target tile for BEH_WANDER that is within "normal" bounds of dungeon (10 to GfooM-11 instead of 0 to GfooM-1) -- wonder if it will keep monsters more to center
+* tweak: spells3::detect_curse() take a bool parameter and returns a bool signifying success -- scrolls of detect curse no longer ID if no curses detected
+* tweak: spells3::remove_curse() take a bool parameter and returns a bool signifying success -- scrolls of remove curse no longer ID if no curses removed
+* updated VERSION and BUILD_DATE
+* variable "char already" struck from ability:show_abilities() -- initialized to zero and never used
+* view::mons_near(int) replaced with view::mons_near(struct monsters *) and applied throughout codebase -- should not be a problem
+* which also means that skills2::add_skill() was pulled, meaning that the definition of the function in skills2.h had to be pulled (now why wasn't *that* #ifdef'd, I ask?)
+
+
+*** SOME OF THE THINGS SINCE THE TESTDEV RELEASE ***
+
+* fixed typo concerning Chaos Knights [josh]
+* added in macro definitions to replace the ENUMS for SPLFOOD SPLMANA and SPLEVEL [brent]
+* stuff::yesno() fixed to take uppercase only, also now clears message screen and reprints query [josh]
+* SPELL_POISON_CLOUD now has the correct associated types [POISON/CONJURATION/AIR] [brent]
+* SPELL_MEPHITIC_CLOUD now has the correct associated types [POISON/CONJURATION/AIR] [josh]
+* bugfixes: some fixes noted by Jesse were applied -- and then even more fixes noted by Jesse were applied
+* all tabs removed from the sources
+* bugfixes: more fixes noted by Jesse in re: array indexing
+* bugfix (potential): ghoul rotting separated out from regular rotting, preventing negative you.rotting value from arising
+* "You smell ..." messages now take into account the fact that mummies cannot smell -- except for a couple mutations and a random demon description
+* added enum SPECIAL_MISSILES to separate out weapon and missile specials
+* bugfix: players resistant to poison eating poisonous chunks will no longer get diseased, unless chunk is rotting
+* bugfix: amulet of gourmand now works as described, and will work to the benefit of both normal species and ghouls
+* added food::lessen_hunger() and food::set_hunger() and some other routines, which led to ...
+* reworked food.cc
+* bugfix: ghouls will no longer become "full"
+* bugfix: summon_small_mammals() will now summon at least one creature [Daniel]
+* minor messaging tweaks here and there
+* killed monster_habitat_2() and reverted monster_habitat() to take int instead of pointer to monster struct
+* added in Jesse's Mac-specific files
+* borrowed a couple tweaks from Gordon
+* fixed a few minor things in spells4.cc and added some small annotations
+
diff --git a/crawl-ref/docs/obsolete/todo.txt b/crawl-ref/docs/obsolete/todo.txt
new file mode 100644
index 0000000000..6974ecff3b
--- /dev/null
+++ b/crawl-ref/docs/obsolete/todo.txt
@@ -0,0 +1,456 @@
+Enhancements:
+
+* make screen update correctly when player vision is <2.
+
+* Make dangerous things be shown on top of a stack. This includes traps,
+ walls of fire, etc.
+
+* Make food acquirement give you more kinds of food.
+
+* file locking for the high score file
+
+* adjust EV for low levels.
+
+* repopulate levels on the way out
+
+* should species armour bonus work on EV instead of AC?
+
+* make rings of fire/ice (and others?) auto identify with use
+
+* miscast effects too weak? Not enough of a threat, especially when used
+ by gods, Zot traps, or mummies as a form of punishment.
+
+* add toggled stealthy mode?
+
+* print out '@' status in character dumps (might be nice to have the
+ chacters status in the dump... method of death might be good as well).
+
+* fix green crystal room so its not boring (pretty vault, just no real
+ point to it currently)
+
+* fix the summoning abuse problem properly. Ideally, the player should
+ not get piety for killing things he summoned, but should get piety
+ for things that are summoned against him.
+
+* Add a wizard debugging function to output several thousand items for
+ a particular depth (should make item frequency tuning easier).
+
+* Perhaps races should be physically "described" (stucture or bit
+ fields) to keep track of their size and physical body parts that
+ interfer with armour. This could also be used in other ways...
+ small races could be harder to hit with ranged weapons
+ than larger ones, but the larger races might get a bonus
+ to carrying capacity... could also probably simplify the
+ extra unarmed combat attacks code
+
+* Speaking of the character info, I really like that Linley now displays
+ the weapon being wielded. We should think about displaying all ten
+ wielded/worn objects.
+
+* Need to make sure that ghost names will be OK when long player names
+ are used.
+
+* Blink prompt is bogus (probably also happens elsewhere). Can probably
+ fix this by adding a prompt argument to look_around.
+
+* Some of the more important messages should be in color?
+
+* The spores contaminate the food by exploding, only the
+ > explosion effect should destroy food on the ground.
+
+ Right. Maybe this should be implemented (it shouldn't be too
+ hard; fiery explosions already destroy scrolls laying on the
+ floor).
+
+ One idea I had with contaminated food was to use the it_plus2
+ variable (which IIRC is currently unused for all types of
+ food) to store the number of items in a stack of food which
+ are contaminated. Say you have a stack of 4 meat rations, if the
+ plus2 value is 1 then one is bad, 3 are good. Any operations
+ carried out on the stack (eating, dropping, picking up etc)
+ have a 1 in 4 chance of taking the bad ration and 3/4 of
+ taking the good. A quantum thing, sort of. Poisoned food could
+ be done in the same way (if there are any variables left - dam?)
+
+ This means that contaminated food doesn't just disappear, it
+ stays around to haunt you.
+
+ This could perhaps lead into a 'food' skill, which lets you
+ cook food, get the most out of corpses, separate the good
+ food from the bad etc.
+
+* Heavy armor doesn't offer enough protection?
+ >The big problem is the strange evasion modifier calculation that
+ >results in armour completely destroying your EV with the
+ >double subtraction thing.
+
+ I don't think this is so strange. It only affects chars who have
+ high dodging skills, and it makes sense to me that dodging
+ effectively and wearing heavy armour should be mutually
+ exclusive unless you're used to wearing heavy armour, in which
+ case the evasion penalty is reduced according to your armour
+ skill and the dodging skill (which can only be picked up when
+ you're wearing light or no armour) is usually ignored.
+
+ I did it this way so that the two skills (dodging and armour)
+ would rarely both be useful at the same time, so players would
+ have to choose between them. Otherwise they could just practice
+ both and everyone would end up the same.
+
+ Personally, I think the double subtraction thing should be left
+ in, but with the following changes to the way armour works:
+ - base AC should be upped considerably, as discussed
+ - the limit on the proportion of the evasion penalty removed by
+ a high armour skill could be raised or scrapped (currently only
+ half of the evasion penalty of a piece of body armour can be
+ negated by the armour skill)
+
+ I would have fixed these problems before I stopped working on the
+ code myself, except that nobody ever complained about them and I
+ didn't notice them myself.
+
+ -- EV penalty now recovered faster, Armour skill slightly easier to
+ get -- base ACs should probably still be upped (bwross)
+
+* New spell realms (Linley doesn't like these):
+ NATURE - spells connected with some nature forces, animals and plants
+e.g. summon small mammal, summon scorpions, summon elemental, passwall,
+resist <element>, create plant/fungus, charm animal/plant and so on
+
+ PROTECTION - protective spells - shield, resist sth., Fire/Ice armor,
+Deflect missiles... HEALING - Cure Light/Serious/Critical Wounds, Cure
+Disease, Neutralize/Slow Poison, Heal
+
+* DRUID class - with spells allowing him to summon animals & plants,
+charm them, also some to work with natural forces - eg. elementals,
+resist fire..., also some healing spells - neutralize poison etc...
+
+* Maybe some God of Nature, which offers to his believers some of Druid
+ ablities
+
+* "write scroll" skill
+
+* Dagger of Backstabbing - hit and Damage bonus when you are backstabbing
+
+* purify food spell
+
+* create water/lava pool spell, also some monsters creating this kind
+ of terrain
+
+* Some work needs to be done for multi-user environments.
+ -- some done, more could be useful (bwross)
+
+* Targetting isn't intuitive enough?
+ -- slightly improved (bwross)
+
+* Use gdbm to save games? However gdbm won't compensate for endian
+ differences...
+
+* Use gdmn to save bones?
+
+* Use zlib to compress saved games?
+
+* larger windows
+ -- number of lines is now handled more dynamically, but only at
+ during init or compile time (depending on NUMBER_OF_LINES) (bwross)
+
+* multiple-windows
+
+* Use XML for monster definitions
+
+* Use XML for room layout/fixed levels
+
+* Use XML for item definitions?
+
+* moves[0], beam[0] should be simplified to use pointers to structs instead.
+
+* Locking to prevent multiple game loads/save file overwrites?
+
+* Allow access to the new longer high score files... add user id field (for
+ multi-user systems).
+
+* Add DEC graphics support for non-IBM machines (like nethack).
+
+* Come up with a better save file system that will accomidate versions
+ easily and involve (hopefully) one smaller file... instead of the
+ large number of current files.
+
+* Add Food/Survival skill
+
+> (1) Cooking Food -- by far the most potential to unbalance the game.
+>
+> Cooking food should probably cost a limited resource to use (fire
+> sources? -- some like spellcasting would be very powerful). It would
+> allow anyone to eat chunks of flesh, thus removing an advantage
+> that carnivores and gourmands have... so you probably don't want
+> to add other advantages like extended shelf life. The food value
+> of chunks of flesh would probably have to be made smaller to maintain
+> the food balance.
+>
+> Maybe cooking should be an ability that's either granted by a god,
+> being a member of a race or class, or becomes available with a
+> certain (high) level of the Food skill (perhaps Survival is a better
+> encompassing name... it could potentially be used for other things
+> as well then).
+>
+> (2) Butchery -- not much of a game unbalance.
+>
+> This doesn't effect the game balance unless its made really powerful
+> (ie. I can get 6 chunks from a bat). Right now you can get a full
+> stomach off of any number of large monsters. A few extra chunks
+> doesn't count for much unless you can improve their shelf life.
+>
+> (3) Detecting Bad Food -- depends
+>
+> If Giant Spores secretly contaminate rations this could be an
+> important skill. Perhaps it could give you a slightly better
+> save on eating meat chunks (limiting the advantage of the
+> carnivore's save and to a lesser extent the "AotG). It could
+> also warn you about things like mutagenic and necrophage meat
+> (give you a yes/no prompt you wouldn't normally get).
+
+
+* New inventory/equip/drop system
+
+>>> // > Makes a certain sense, but I can drop any number of the healing potions
+>>> // > as one action that suggests a bit more care... also I could just drop
+>>> // > all of my potions and that would take an action for each stack I had,
+>>> // > whereas all it probably requires is me dropping my "potion sack" or
+>>> // > dumping it out.
+>>> // >
+>>> // How about a compromise where you can hit d% to drop all your food,
+>>> // or d! to drop all your potions, but if you want to discriminate you have
+>>> // to do them individually?
+>>>
+>>> I'm wanting something a bit more featured like the nethack system (not
+>>> the old traditional, but the newer ones). Bascia concept would be that
+>>> I could either select via inventory slot letter, or optionally pull down
+>>> an inventory browser/selector and select the items I want. Complete
+>>> with options like "select all potions", "toggle all potions", "select all",
+>>> and "unselect all" (for example).
+>>>
+>>> If you want to add aditional time for discrimination, you can do it
+>>> Ragnarok style (I like the Ragnarok armour equip system) and have a
+>>> counter on the top line (with a short list of commands) that tells the
+>>> player how many turns the action will take. There are a few problems
+>>> with calculating this value, because there are any number of ways
+>>> I can select all potions and the value should be independant of
+>>> which ever I choose to use.
+>>
+>> Well, it would seem that the time calculation should depend on the
+>>final set of selected items rather than the steps taken to select them.
+>>That would remove abiguity. We could generate a time based on the variety
+>>of things dropped. So, if you were dropping potions, swords, rings, and
+>>scrolls, it would take you much longer than to just drop your rings. It
+>>might be worth it to let weight factor into drop speed as well.
+>
+>You don't want to get too complicated. There's a limit to the
+>granularity here, as you probably don't want to have it taking a
+>couple dozen actions to drop some equipment. A simple little
+>penalty for dropping only part of a stack, or only some types
+>of potions is probably enough of a change.
+
+
+* Options files
+ -- must keep two distinct types of options and handle them separate:
+ - ones that would be loaded from a "crawlrc" file and would effect
+ the players characters in a general way.
+ - ones selected during the game and would be carried between
+ saves, but not to other characters the player is playing.
+
+* fix non-magical traps
+ -- should have some number of "charges" for those that shoot items...
+ these should be more dangerous as well.
+ -- monsters should "learn" the traps of a level.
+
+> Could be done with a bit array (if there is a limit of 32 traps on
+> a level, that would be bonus... but it could be extended to more
+> for not too much trouble). That would take up little space, and
+> testing would be by simple boolean operators (to test if the monster
+> knows about trap X, you check (monster.traps & (1 << X))). We could
+> have the code test the line of sight from a trap everytime it is
+> activated, and set the appropriate bit of the array in any monster
+> within line of sight.
+
+
+* Revert/change the Elementalist spellbooks?
+
+> // >This brings up another little problem around here. People around
+> // >here weren't entirely happy about the change to the Elemental
+> // >Spellbooks in 3.30. For the most part its considered that the
+> // >elementalists are becoming less individual in flavour and that
+> // >they're now just slight variations of Fire. In particular (and
+> // >pertaining to this discussion), was the loss of levitation from
+> // >the Air book, which was considered a useful "Tensor's Disk" for
+> // >lifting stuff up stairs.
+> //
+> // I removed levitation because it no longer fit, and I didn't
+> // want to stretch air out to three books. As for the other changes,
+> // these were made because I thought the non-fire elements were too
+> // weak by far. Which spells in particular are problematic? (I'll
+> // try to write an explanation for the differences between the
+> // elements when I have a little more time)
+>
+> Well, we didn't think the other elements were actually "weaker".
+> They're only weaker in combat potential -- Fire was all attack, the
+> others offered more utility and defensive abilities. There was
+> enough combat in the others to get you well into the midgame, at
+> which point you adapt to whatever books you find (its typically
+> quite hard to get the advanced versions of your magic discipline...
+> I remember how happy I was when I finally had a necromancer find
+> Unlife... my Paladin had a complete set of death books early on).
+>
+> The main problem is that the elements were made too similar (we
+> really liked the fact that they all played quite different, it
+> was one of the things that made crawl really popular here).
+>
+> For example, they all start with a slight variation of the same spell.
+> This means that they all start playing the same way, with the same
+> tactics. Before you could play Earth for the range attack, or Air for
+> the somewhat risky-yet-powerful Shock.
+>
+> There's still a little varity left, but certain bits are gone. You
+> can't depend on getting summoning when you start with Ice, for
+> example. The Levitation spell is now only in the Enchantment book,
+> it used to be a something you could depend on as an Air mage (now
+> you have to hope to get the book of Sky, and that gets you Fly, which
+> is better, but is also a level four spell).
+>
+> Earth had a little issue before (too many similar throwing spells),
+> but replacing Throw Pebble with Crush just makes it the same as the
+> other elements. Stone Arrow has always been better than Iron Bolt,
+> IMO... iron bolt just isn't effective enough to justify the extra
+> cost and difficulty... it requires really high skill levels to
+> be better. I would have rather seen Iron Bolt go, in favour of
+> something a bit more interesting (Earthquake, Pass Wall, Stair
+> Creation).
+
+* Improve running code
+
+* Carrion eating mutation
+ -- like vegetarian and carnivore, only gives a preference for
+ rotten meat. Progesses with level until the character
+ can only effectively eat rotten food.
+
+* Add rumours/fortune cookies?
+
+* Improvements to the character dump
+ -- is the current dump as verbose as wanted/too verbose?
+ -- add spell failures to dump?
+
+* Change character for throwing weapons to '(' and small armour to '['.
+ -- Problem: '(' is used for dancing weapons.
+
+* Put some limits of teleport/teleport control? Make it rarer?
+
+* Improve artefacts to compete better with Sword of Power? Improve
+ non-sword weapons so they become more of a choice?
+
+* Currently possible to gain 0hp when gaining a level... should
+ be safeguards added to make sure this is at least never negative,
+ if not guaranteeing 1hp / level.
+
+* should be able to see contents of books in stores?
+
+* remove possibility of teleport control with the Blink spell (require
+ the player to use the Control Blink spell instead).
+
+* merge the chardump spell listing code with the other spell listing code.
+
+* throw traces to target should coincide with line-of-sight better
+
+* item inscriptions
+
+* are crossbows correct? The other launchers seem to be adding their
+ skill bonuses twice
+
+* The Throwing skill isn't particularly useful. You could use it for
+ throwing daggers, axes, or spears but they don't stack and are
+ heavy.
+
+* add some weapons/change weapon code so that non-swords are more of
+ an option
+
+ // >I was thinking that this might be a good way to increase the value of
+ // >non-sword weapons.
+ //
+ // .. which probably needs to be done anyway. One or two
+ // suggestions for new weapons which could help:
+ //
+ // - axe (just axe, no 'hand' or 'battle' there): this would be to
+ // a hand axe what a long sword is to a short sword. Skills may
+ // need to be adjusted (a new 'great axes' skill, covering the
+ // two-handed axes? Or just condense the sword skills).
+ // - Spiked flail: like a flail, but more damage and slightly
+ // slower (heavier etc).
+ // - Great flail/mace: two-handed versions.
+
+ These would certainly help out a bit. The other weapon classes were
+ lacking good intermediates. I don't think a "great axe" skill is
+ required, removing "great swords" might be correct (although it
+ does add a limiting factor on the power of swords). Having weapon
+ skills where only one member of the class exists doesn't seem very
+ worthwhile. Maybe fighting style skills could be used instead...
+
+ - 'two handed weapons' could be a skill for all two handed weapons,
+ it would be used in conjunction with the appropriate weapon skill.
+
+ - 'shields' would cover "weapon and shield" style, maybe allowing
+ for the possibility of offensive shield bashing.
+
+ - 'unarmed combat' or 'fighting' could cover the cases where one
+ or both hands are empty. Characters not using one of the other
+ styles should be able to use unarmed strikes more often and
+ more efficiently.
+
+ Potentially, you could add a bastard sword to the game. Its hand and
+ a half nature could put it in any of the above categories (if you
+ have a shield, it would be the second... if not it could be either
+ of the other two).
+
+ Of course, adding new skills has its own problems... there is already a
+ shortage of space on the skills screen.
+
+ -- add special attacks to weapons and allow them to be accessed by the
+ player via SHIFT-<move> onto an adjacent monster.
+
+- fix monster enchantments to have proper timeouts and a better structure
+
+- score file still gets messed up from time to time... should probably
+ change the format into something that can be expanded and contains more
+ information that might be printed (user id on multiuser systems, time, etc)
+
+-- add checking for legal background colour (or just let it ignore the
+ "bold" colours like it does now?)
+
+-- change file formats and functions
+ -- change score file format (see nethack for additional fields... also
+ maybe a field for damage done by killing attack... could be used to
+ spice up the death description (use final HP?))... also a userid
+ field for MULTIUSER systems would be nice (to tell likenamed
+ charcters apart and identify the player).
+
+-- sort out spells into separate spl-* files based on type/skill
+
+-- make all this you.inv_*, mitm/itm stuff the same instead of
+ having conversions everywhere.
+
+-- differentiate the good gods more
+
+-- break up dungeon.cc more
+
+-- a check floor for lava/water function
+
+-- a simple "summon hostile unfriendly/random demon" spell with fewer params?
+
+-- centralize the elemental resistance code into a single entry point that
+ takes damage and type and does the appropriate things... some of the
+ cases are notably special, so some extra damage cateogries might have
+ to be created (ie. stepping/falling into lava is an instadeath for
+ characters with negative fire resistance, but being hit with a lava
+ bolt is only extra damage).
+
+-- functions to check for specific equipment (ie reduce checks for "!= -1")
+
+-- move ghost/demon array into a proper structure.
+
diff --git a/crawl-ref/docs/obsolete/versions.txt b/crawl-ref/docs/obsolete/versions.txt
new file mode 100644
index 0000000000..d7387c60ca
--- /dev/null
+++ b/crawl-ref/docs/obsolete/versions.txt
@@ -0,0 +1,782 @@
+ Crawl Versions History
+
+ The name after each bug is the person who found it and told me
+ first. If you find a bug and for some reason don't want to be
+ credited, just tell me on the bug report.
+
+First DevTeam Release: 3.40 [23.02.2000]
+
+ This is an abbreviated list of changes. For the full list, see
+ changes.340.
+
+ Bug Fixes:
+
+ * Fixed Abyss-related crash bug;
+ * Should now be able to escape the Labyrinth; and
+ * Players can no longer descend below the 27th level.
+
+ Gameplay and Mechanics:
+
+ * Implemented initfile (see init.txt for explanation of options);
+ * Added autopickup option (see init.txt for details);
+ * 'Easy Crawl' -- doors open when running or walking into them;
+ * 'V' and 'v' commands swapped -- now examine object and version
+ check, respectively;
+ * "Over-map" added;
+ * max hit points ceiling displayed when the player's max is down;
+ * Information about character's experience pool added to main
+ screen;
+ * Implemented new equipment listing commands: ')', ']', and '"'; and
+ * Removed halving of cost for spellcasting skills.
+
+ Game (re-)Balancing:
+
+ * Three runes (at least) required to enter Realm of Zot;
+ * Killing creatures created friendly no longer generates xp;
+ * Skill gain modified for better balance;
+ * Backstabbing with daggers now much more effective;
+ * Stealth is now much more effective (try playing thieves again!);
+ * Resistances to electricity and poison no longer absolute;
+ * Disarming traps may now trigger them;
+ * Armor and evasion skills are more effective;
+ * Great and triple swords now treated as long swords for purposes of
+ skill (Great Swords skill removed); and
+ * Berserk mode made more interesting:
+ + Berserk counter decrements more quickly when not attacking;
+ + Butchery no longer penalized, resets the penalty counter;
+ + Eating no longer penalized, does not reset penalty counter;
+ and
+ + Added exhaustion counter to track berserk fatigue
+
+ Monster Modifications:
+
+ * Monster AI improved in various ways;
+ * More info available when examining monsters and when their
+ enchantments expire;
+ * A few new low-level monsters added;
+ * Ghosts inflict less damage, heal more quickly, and may teleport;
+ and
+ * Three 'silly' monsters (dorgi, sword, guardian robot) removed.
+
+ Character Changes:
+
+ * Stalkers, assassins, and venom mages now being with knowledge of
+ Potions of Poison;
+ * Spriggan assassins and stalkers now allowed;
+ * Halfling assassins and warpers now allowed;
+ * Horned characters may wear caps and hats;
+ * Lessened penalty for use of large shields by giant races;
+ * Rangers are now called hunters;
+ * Assassins now begin with unarmed combat, stat modifiers for
+ thieves and assassins reversed;
+ * Altered stat modifiers for wizards, making them smarter than other
+ spellcasters;
+ * Rebalanced the Gladiator and Fighter classes;
+ * Lowered the experience penalty for demonspawn characters;
+ * Kobolds now receive a stat increase every five levels; and
+ * Spriggans and Halflings now consume less food than before.
+
+ Item Changes:
+
+ * Hand-and-a-half weapons added -- bonus if no shield wielded;
+ * Added weapons of reaching, permitting attacks two squares over;
+ * Cekugob no longer confers resistances to fire and cold;
+ * Worn cloaks no longer prevent donning/removal of body armor;
+ * Amulet of maintain speed now the amulet of resist slowness; and
+ * New weapon types: knife, axe, broad axe, spiked flail, great
+ flail, great mace, trident, demon trident.
+
+
+
+3.31-pre [~28.04.1999]
+
+ * An attempt to merge the Mac port with the DOS/Linux code.
+
+
+
+Linley's Last: 3.30 [30.03.1999]
+
+ * All known bugs (a *huge* list) fixed;
+ * Several spells added, mostly to make Earth, Ice, and Air magic
+ viable in comparison to Fire;
+ * Numerous rebalancings;
+ * "Unrandom artefacts" added -- see the source files randart.cc and
+ unrand.h for details (These are very easy for non-coders to add);
+ * 'V' command made available in shops;
+ * Crossbows upgraded;
+ * Characters lacking magic skills cannot learn spells;
+ * It's now possible to get level 1 Spellcasting just by reading
+ scrolls; and
+ * A whole heap of other stuff.
+
+
+
+3.20 [09.02.1999]
+
+ * New races: Demonspawn, Ghoul and Kenku;
+ * A new God, Yredemnul, and this one is a lot better than Nemelex,
+ who has also been upgraded a bit) -- another option for Priests
+ and Death Knights;
+ * Changes to a few spells, and I finally got around to upgrading the
+ crappy armour spells;
+ * Heaps of the usual rebalancing and some new features; and
+ * Many bugs found by Daniel Ligon and others fixed.
+
+
+
+3.11 [31.01.1999]
+
+ * Fixed minor bugs; and
+ * Tweaked the balance of the early levels and monsters.
+
+
+
+3.10 [27.01.1999]
+
+ * New races: Spriggan and Minotaur;
+ * Added a new and rather strange God;
+ * Shallow water implemented;
+ * An Invocations skill was added;
+ * Invocations are generally much cheaper to use, especially in
+ piety;
+ * Random demons in Pandemonium;
+ * Many, many new monsters and several items added;
+ * New mutations;
+ * Plenty of rebalancing done;
+ * Chaos Knights now have a choice between Xom or Makhleb;
+ * Centaurs have been toned down a lot (and now require more food);
+ * Heaps of new minor features; and
+ * Many bug fixes.
+
+
+
+3.02 [~04.01.1999]
+
+ * Certain monsters' attacks upgraded and spells balanced, too;
+ * Fixes the currently known about bugs and tweaks balance; and
+ * Only one known bug remaining (an empty macro.txt file can cause a
+ crash).
+
+
+
+3.01 [~01.01.1999]
+
+ * Bugfix release: Version 3.0 was a little bug-ridden, including a
+ small problem where stats were raised by wearing almost anything.
+
+
+
+3.0 [23.12.1998]
+
+ * Fixes all known bugs (but unfortunately invalidates old save);
+ * Lots of new dungeon features -- new monsters, items, etc.;
+ * Random artefact armours, rings and amulets;
+ * Two new races: centaur and demigod;
+ * Three new classes: stalker, warper and monk;
+ * Unarmed Combat skill added;
+ * Ghosts upgraded -- they now remember a little more from past lives;
+ * Various minor miscellaneous changes have been made -- for example,
+ the 'x' command now describes items as well as monsters/dungeon
+ features;
+ * A new dungeon branch;
+ * A new God to worship; and
+ * Sam Jansen has reformatted several modules (including the horrible
+ dungeon.cc), making them far easier to read and work with.
+
+
+
+2.95 [15.12.1998]
+
+ * Fixed the bug in 2.94, by which reloading a level with a mapped
+ arch on it crashed the game, has been fixed by saving all files in
+ binary, rather than text, format;
+ * Gives crusaders the full range of spells in their initial
+ spellbook;
+ * Species-skills table in skills2.cc has been converted to an array;
+ * For source-readers, the horrible dungeon.cc module has been
+ revised and reformatted by Sam Jansen; and
+ * A Linux message output bug fixed by Robert Glowczynski.
+
+
+
+2.94 [09.12.1998]
+
+ * All known bugs fixed (including, I hope, the notorious Item Link
+ Error bug);
+ * Several interface improvements;
+ * Several rebalancings; and
+ * File I/O rewritten by Alexey Guzeev -- it's now several times
+ faster.
+
+
+
+2.93 [~23.11.1998]
+
+ * Alexey Guzeev's OS/2 port integrated into the code; and
+ * Many bugs fixed, and a few new features (mostly user interface).
+
+
+
+2.92 [??.??.????]
+
+ * I think I forgot to release this version.
+
+
+
+2.91 [17.11.1998]
+
+ * Bug fix version;
+ * Trolls and Ogres can now choose the Berserker class;
+ * Random artefacts are now a bit more common;
+ * Shops contain better items; and
+ * Source code should now compile properly under Linux (thanks to
+ Svante).
+
+
+
+2.90 [13.11.1998]
+
+ * Juho Snellman's macro-patch was added;
+ * Random "artefact" weapons added -- these are special weapons with
+ a wide range of possible abilities;
+ * Several new items and monsters;
+ * Hell and the Realm of Zot are now much nastier.
+ * Considerable balance changes;
+ * New dungeon formations;
+ * The 'V' command now gives more specific information for weapons
+ and armor;
+ * 'Target previous monster' function is now a bit easier to use;
+ * You can now command your servants to attack ('!' command); and
+ * Bugs fixed.
+
+
+
+2.83 [31.10.1998]
+
+ * Yet another bugfix release;
+ * Some new monsters and items;
+ * Reaver class added; and
+ * The Dungeon is again only 27 levels deep.
+
+
+
+2.82 [24.10.1998]
+
+ * Another bugfix release; and
+ * Adds some new user-interface features.
+
+
+
+2.81 [20.10.1998]
+
+ * Bugfix release.
+
+
+
+2.80 [18.10.1998]
+
+ * New species: Draconian (yes, I have been playing too much
+ Zangband!);
+ * New classes: Healer, Chaos Knight, Transmuter;
+ * New monsters, including some which make curse skulls look
+ completely harmless;
+ * Religions and altars -- there are 8 or 9 gods who you can worship,
+ each of whom requires different forms of devotion and offer
+ different advantages;
+ * Greatly expanded Transmigration magic, including
+ self-transformations;
+ * Several new dungeon branches;
+ * Necromantic weapons (draining, vampiric, etc) are now more
+ effective;
+ * Significant balance changes -- deep levels should be harder now;
+ * Special abilities ordered in the new 'a' abilities menu;
+ * New items, spells, monsters, etc. as usual; and
+ * A number of bugs found in the source by Daniel Ligon were erased.
+
+
+
+2.72 [~02.10.1998]
+
+ * Another bug fix version (there seem to be a lot of these); and
+ * Still a couple more bugs from 2.71 to bash and the balance may
+ have been a little on the easy side.
+
+
+
+2.71 [25.09.1998]
+
+ * Bug fix version.
+
+
+
+2.70 [22.09.1998]
+
+ Heaps of new features (I almost called this version 3.0):
+
+ * New species to choose from: Ogre, Troll, Ogre Mage;
+ * New class: Venom Mage;
+ * Several huge branches (extra dungeons branching off from the main
+ one), each containing special new monsters and terrifying vaults;
+ * New winning conditions;
+ * Player ghosts;
+ * Mutations;
+ * Many new items, spells, monsters;
+ * Several bugfixes; and
+ * ... a heap of other stuff.
+
+
+
+2.61 [06.09.1998]
+
+ A bug fix version:
+
+ * Levitation is no longer permanent;
+ * Fixes dropping-worn-armour bug;
+ * Fixes item destruction bug (when picking up an item from the
+ middle or bottom of an item pile);
+ * Fixes poison and sticky flame bugs (neither worked properly);
+ * Fixes 'program bug' bug;
+ * The recall message screen no longer crashes the game;
+ * Paralysis works again;
+ * Drained dexterity is now displayed properly;
+ * Some essential files were accidentally omitted from the source
+ distribution -- they have been replaced;
+ * Something I forgot to mention for 2.60: most rings no longer use
+ food -- check them with 'V' when identified; and
+ * There is a 'little surprise in this release which gives an
+ indication of what will be in the next big release'.
+
+
+
+2.60 [01.09.1998]
+
+ The Source Code Clean-up is finally finished!
+
+ * Functions have been split up into about 30 different modules,
+ making coding *much* easier;
+ * All functions are now available from any module;
+ * An alternative display set for non-IBM graphics displays included
+ (activate it with a -c command-line switch);
+ * Several minor balancing changes were made; and
+ * If the game crashes, you can continue from the last save (unless
+ it crashed during saving). Your game is autosaved every time you
+ climb stairs.
+
+ A great number of interface changes were made, many of which were
+ suggested by Eino Keskitalo and Jim Baranovich. These include:
+
+ * The clumsy '^' untrap command has been replaced by a new use for
+ the control key;
+ * The character selection menus have been streamlined, with a new
+ random option;
+ * Shop displays are easier to read;
+ * The old message display has been rendered readable;
+ * It is now possible to reorder items and spells; and
+ * Various other things.
+
+
+
+2.51 [18.05.1998]
+
+ Purely a bug fix version:
+
+ * Item 1 no longer turns green on saving;
+ * *Hopefully* the horrible item bug has been permanently removed (at
+ least parts of it have, anyway);
+ * Repeatedly casting Deflect Missiles no longer causes problems;
+ * Skill selection now works properly (there were some problems in
+ 2.50); and
+ * A couple of bugs in monster teleportation have been fixed.
+
+
+
+2.50 [03.05.1998]
+
+ Changes made:
+
+ * Character classes made much more relevant;
+ * Class system is back, in a slightly different form. Characters now
+ gain a certain amount of skills when the gain levels (depending on
+ which class they are). The old system is still in place but
+ advancement is slower with it;
+ * New class: Death Knights;
+ * Monsters can now use more kinds of items;
+ * Heaps of items, monsters, spells etc added;
+ * Naga and Gnome character species added;
+ * Rings of teleport control now available;
+ * Levitating across water or lava works properly now;
+ * Shields are now much more effective;
+ * All known manifestations of the horrible item bug have been
+ tracked down and fixed (except for the apparently harmless
+ items-turning-green thing); and
+ * Et cetera.
+
+
+
+2.41 [~22.04.1998]
+
+ Bugs fixed:
+
+ * The game occasionally crashed in the iron city of Dis;
+ * Gates out of pandemonium were too rare;
+ * There were problems with saving and restoring magic points; and
+ * The source code distribution was extremely confusing.
+
+
+
+2.40 [~19.04.1998]
+
+ * Two new races: Kobolds and Mummies;
+ * Five new classes: Four types of elementalist and a fighter/wizard
+ [Crusader] class;
+ * New skills -- elemental magic and traps and doors;
+ * New spells to go with the new skills and a spell failure system;
+ * Heaps of spells, items, and monsters added (as usual);
+ * You now get 1/2 experience for monsters killed by tame monsters;
+ and
+ * A large part of the monster and skills code was rewritten and
+ generally cleaned up by $pellbinder (Wladimir van der Laan).
+
+
+
+(2.33) 2.34 [~22.03.1998]
+
+ * A crash bug and some problems with items should be fixed with this
+ release; and
+ * I forget right now, but these releases probably just fixed stuff.
+
+
+
+2.32 [~15.03.1998]
+
+ * Even more cool stuff fixed;
+ * Level files are now deleted properly under Windows 95;
+ * Removed a bug which sometimes caused the dungeon generator to
+ hang; and
+ * Compiling no longer generates warnings.
+
+
+
+2.31 [~13.03.1998]
+
+ * Lots of cool stuff fixed;
+ * Fixes the problem with magic missiles and saves; and
+ * Adds amulets and several new types of armour.
+
+
+
+2.30 [~11.03.1998]
+
+ * Lots of cool stuff added;
+ * New in this version is a character race system with ten races to
+ choose from and a trove of new monsters and items; and
+ * Character dump feature implemented in the last version has been
+ fixed now so you'll be able to swamp the newsgroups and annoy the
+ regulars with ritualistic weekly reports of your favourite
+ adventurer.
+
+
+
+2.21 [~20.02.1998]
+
+ * Various bugfixes and minor changes;
+ * Added the ability to produce character dumps (popular with the
+ newsgroup egocentrics); and
+ * Among the usual bunch of fixes, characters now get the chance to
+ disarm traps (especially thieves).
+
+
+
+2.20 [~15.02.1998]
+
+ * Added a comprehensive skills system;
+ * Angband-style vaults and unique monsters;
+ * Fixed a few very minor bugs and added a vast number of new
+ features, the Abyss, Pandemonium, etc.; and
+ * Dungeon architecture is also a lot more varied.
+
+
+
+2.11 [~21.01.1998]
+
+ * First Linux release, ported to Linux by Svante Gerhard;
+ * Updated source tree allows for easier ports onto other Unix
+ systems; and
+ * The port will apparently also run on a Sun Sparc running SunOS.
+
+
+
+2.10 [30.12.1997]
+
+ Sorry to all of the many people who've been sending me bug reports,
+ but it's become too tricky to list all bugs and credit their
+ finder. I'm just getting too much email, and my mail reader has a
+ strange way of eating some messages and making them very difficult
+ to find. So from now on, I'll just list some of the major bugs
+ fixed and major features added:
+
+ * A bug with wearing armour of fire/cold resistance was fixed;
+ * The properties of several items and spells were tweaked a bit;
+ * Specialist wizards were made even more powerful in their
+ discipline;
+ * The dungeon was made deeper (36 levels now), and lots of new
+ monsters were added to fill in the deeper levels;
+ * Several spells (mostly necromancy) were added;
+ * The dungeon architecture is a bit more varied, especially as you
+ get deeper; and
+ * A warning was added to labyrinths ... among other things.
+
+
+
+2.03 [22.12.1997]
+
+ This version fixes a few bugs, and puts back the floating point
+ emulation which was missing from previous version 2 releases
+ (Daniel Josef Dekok and someone else noticed this). It also removes
+ the debugging code which was accidentally included. Bugs fixed:
+
+ * Butterfly corpses were coloured black, making them invisible
+ (Bridget Farace);
+ * Shadow lanterns were also coloured black, and kept on working even
+ after you unwielded them (Bridget Farace);
+ * Items purchased from shops were not identified properly (Lord Gek,
+ Timo Laitila);
+ * Scrolls of Acquirement weren't being identified after being read;
+ * When you got hit by a monster wielding a weapon of draining,
+ events could become confusing (Timo Laitila);
+ * Finally, the '5' key on the keypad works as a rest key (Timo
+ Laitila); and
+ * Names longer than 8 letters caused problems with saving and
+ restoring games, especially in Windows 95 (Lord Gek and Timo
+ Laitila).
+
+ The following new features were also added:
+
+ * When tame creatures kill monsters, you now get 1/3 xp (Howard
+ Liu);
+ * Orcish spellcasters have been downgraded a bit (lots of people
+ recommended this);
+ * Specialist wizards are now slightly more powerful in their
+ specialisation, especially with magical staves (I can't find the
+ usenet post which told me about this); and
+ * ... A few other minor changes.
+
+
+
+2.02 [13.12.1997]
+
+ I'm afraid that 2.01 didn't fully fix the bug in the shop code, but
+ hopefully this version does. Just about the only differences
+ between this version and 2.01 are:
+
+ * Pressing 'r', 's', or 't' while in a shop really no longer crashes
+ the game (Saradon and Bridget Farace);
+ * If the scores file is not present, a new one is generated. I've
+ stopped including a scores file in the distribution, so that you
+ can unpack the zip file into your old crawl directory and keep on
+ using the old score file; and
+ * Save games should be compatible with 2.01.
+
+
+
+2.01 [12.12.1997]
+
+ I had wanted version 2.0 to be a stable and bug-less release, but
+ this was not to be. Anyway, 2.01 fixes these bugs:
+
+ * Zapping a wand of polymorph at yourself caused problems (polymorph
+ self hasn't been implemented anyway) (Saradon);
+ * Polymorph other didn't work properly;
+ * Choosing a non-existent item in a shop crashed the game (but only
+ sometimes, which was why I didn't notice it) (Saradon);
+ * Spell descriptions weren't working properly (Saradon);
+ * Some messages were misspelt due to an indiscriminate
+ search/replace (Adam Horowitz);
+ * Detect curse didn't detect curses on unrecognised rings (this bug
+ had been present right from version 1.0);
+ * Sometimes, a special weapon in the hands of a monster would not
+ function properly (watch out for creatures wielding weapons of
+ draining!);
+ * The use of the control key was not mentioned in the command list
+ (it opens/closes doors, like in Angband); and
+ * ... a few others (if I haven't credited someone, please tell me).
+
+ Also, a few new things were added, as suggested by Saradon: A shout
+ command ('!') to attract your followers (and enemies!), and better
+ equipment for the enchanter. Also, you are now given a difficulty
+ message and prompted when memorising spells, so you will know which
+ spells you won't be able to cast reliably before you memorise them.
+
+ * Scrolls of Acquirement create much better items; and
+ * Enchanters now get a magical dagger/robe with which to start.
+
+
+
+2.0 [09.12.1997]
+
+ There have been so many additions in this version that I'm not
+ going to list them all, but here is a very incomplete list of bugs
+ and things rectified:
+
+ * Characters could cause an excessive amount of damage empty-handed
+ (Bridget Farace);
+ * Darts didn't fire properly when character not wielding anything
+ (Bridget Farace);
+ * Hand crossbows didn't work properly;
+ * Fireballs always did the same amount of damage (0-27), regardless
+ of who cast them and how powerful they were;
+ * Going to Hell could have unexpected results due to an
+ out-of-bounds reference to levels_exist[];
+ * Permanent levels, which are saved when you leave, and to which you
+ can later return;
+ * Shops;
+ * Several new character classes, including Rangers, Assassins,
+ Summoners, etc.;
+ * A more interesting Hell;
+ * New creatures, items, and spells;
+ * Written descriptions of every single item, spell, and monster in
+ the game; and
+ * Several bugs squashed.
+
+
+
+1.22 [~06.11.1997]
+
+ * Fixes a minor bug with weapons of slay orc and brings back the old
+ spell level system.
+
+
+
+1.21 [~03.11.1997]
+
+ * Fixes a bug which caused problems with high-level spellcasting.
+
+
+
+1.2 [02.11.1997]
+
+ * The monster and cloud location bits have been completely
+ rewritten, a process which turned out to be rather easier than I
+ thought it would be. The new system is much more flexible;
+ * Monsters are now a bit more intelligent, especially in the way
+ they treat clouds;
+ * Several monsters have been added;
+ * Several items and two new classes of items (Carrion and
+ Miscellaneous) have been added;
+ * Several spells, most of them necromantic, have been added;
+ * The Gladiator, Necromancer, and Paladin classes have been added;
+ * A spell type system has been implemented, and several new staves
+ to specialise in particular types of magic have been added
+ (conjuration, summoning etc.);
+ * New unique items have been added, and a bug (actually, a mistype)
+ which prevented some from being generated has been removed;
+ * A few bugs have been removed; and
+ * Several other changes have been made, too numerous to mention
+ here.
+
+
+
+1.10 [14.10.1997]
+
+ * Several new items and monsters were added;
+ * Labyrinths were added;
+ * Magical weapons are now less powerful;
+ * Some bugs have been fixed -- I forget what they were right now;
+ and
+ * The source was released, and Crawl is now under the GPL (see
+ Licence.txt for details).
+
+
+
+1.05 [07.10.1997]
+
+ * A minor display bug was fixed;
+ * A bug with restoring clouds from saved games was fixed;
+ * A major bug which caused a segment violation when restoring saved
+ games if there were any magical traps on the level was finally
+ discovered and fixed;
+ * Those pathetic worms you see around level 6 are now nastier, and
+ jackals now tend to appear in packs; and
+ * This time, your item memory really does work.
+
+
+
+1.04 [06.10.1997]
+
+ * A few really nasty bugs with saved games were fixed. The game
+ would not save enchantments affecting monsters, and would mess up
+ the items carried by the monsters (Adam Horowitz);
+ * A bug with the enchanting/corroding of shields was fixed;
+ * A '<=' instead of a '<' led to characters not using shields
+ occasionally blocking trap missiles (Adam Horowitz);
+ * You can now type '+' or '-' in the map screen to move around
+ faster (Adam Horowitz);
+ * The direction function now accepts '.' as well as delete (Adam
+ Horowitz);
+ * During your first step while long-walking, you can walk on
+ anything (still prompts for water, etc., though) (Adam Horowitz);
+ and
+ * I think that was all.
+
+
+
+1.03 [04.10.1997]
+
+ * Some unique items were added;
+ * A silly bug, by which your item knowledge was not saved, was fixed
+ (Darren Hebden);
+ * Teleport traps now work properly; and
+ * I think I fixed another bug, but I can't remember.
+
+
+
+1.02 [04.10.1997]
+
+ * A few more items and traps have been added;
+ * The game now uses the rogue keys (hjklyubn) properly; and
+ * You used to be able to throw and zap straight when confused. No
+ longer!
+
+
+
+1.01 [03.10.1997]
+
+ * Shields were changed;
+ * Items were made more common;
+ * Monsters were made less common (this was a bug);
+ * Cursed weapons were made less common (this was just bad planning);
+ and
+ * I changed the name to make it a bit less egotistical.
+
+ Bugs removed include:
+
+ * A debugging feature of the 'x' command was unintentionally left
+ in;
+ * The summon scorpions spell summoned a vampire (oops) (Haran
+ Pilpel);
+ * Sometimes +50 armour could be generated (oops again) (Haran
+ Pilpel);
+ * The inventory item counter was not decremented when you dropped
+ something! This would lead to you being unable to pick things up
+ after a while (Darren Hebden);
+ * A bug with detect curse scrolls (Darren Hebden);
+ * Slime creatures and jellies were a bit weak;
+ * Killing normal (not spitting) plants gave you far too much xp;
+ * Your rate of regeneration was not saved properly;
+ * About half of the rings could never be generated;
+ * The 's' command would sometimes make you repeat your last move
+ (Haran Pilpel);
+ * I forgot to mention the walk-in-place function in any
+ documentation;
+ * I set the level builder to put 100 monsters on each new level for
+ debugging, and forgot to reset it -- I really should playtest
+ more!;
+ * If you tried to cast spell 'z', you cast the identify spell (Lucas
+ Ackerman); and
+ * A few more fixes which I forget right now.
+
+
+
+Linley's First: 1.00 [02.10.1997]
+
+ * First (rather buggy) version.