When looking to see whether the monsndx() panic could provide any more
useful information [if a pointer that's supposed to point into the
mons[] array doesn't, I don't think that there's a whole lot of other
information available aside from whether it is null or not, and that's
implicitly provided already], I went through the whole file cleaning up
the formatting and making sure every routine was preceded by a short
(usually one line) comment.
There were a few bits of code reorganization. I changed little_to_big
to have a single point of return. The 25 year old workaround for a
compiler bug on a defunct platform may or may not still be applicable;
I took that out. If we get segfault reports for AIX on PS/2, this is
the first place to look. (big_to_little is nearly identical and didn't
have the same workaround. Not needed, or not called often enough for
any AIX PS/2 user to be affected?)
Changes to be committed:
modified: include/botl.h
modified: include/extern.h
modified: include/wintty.h
modified: src/botl.c
modified: src/options.c
modified: src/windows.c
modified: win/tty/wintty.c
get the tty versions started
Changes to be committed:
modified: include/extern.h
modified: src/botl.c
modified: src/options.c
modified: src/windows.c
defer notification of the window port until after
proper initialization. Options are processed very
early in 3.6.0
Changes to be committed:
modified: include/botl.h
modified: src/botl.c
modified: src/windows.c
modified: win/tty/wintty.c
Move the windowport stuff out of botl.c and into windows.c
where it belongs.
If Sting is glowing when blindness gets toggled, give a new "glowing"
message.
So instead of
Sting glows blue! [...] You can't see! [...] Sting stops quivering.
if you're still blind when the last orc goes away, or
Sting quivers slightly. [...] You can see again. [...] Sting stops
glowing.
if you were blind when the first orc arrived, now you'll get an
intermediate message between the second and third ones. 'Sting is
quivering' for the first case, 'Sting is glowing' for the second.
No matter how many times blindness toggles back and forth, the final
"stops glowing" or "stops quivering" will be consistent with the most
recent "is glowing" or "is quivering".
If there is more than one container, the #tip command will show a menu;
if there's just one container, prompt for tipping.
As per Boudewijn's suggestion, remove the superfluous
"There is a container here" message.
Add "(glowing light blue)" to the formatted object description when
Sting or Orcrist is glowing due to presence of orcs or "(glowing red)"
if Grimtooth is glowing due to elves. Use "(glowing)" if blind;
assumes that some aspect of the glow (perhaps warmth or vibration) can
be noticed via touch.
Make enlightenment's "you are warned about <monster class> because of
<artifact>" catch up with Orcrist and Grimtooth. It was attributing
Orcrist's warning against orcs to Sting, and Grimtooth's warning was
against "something" rather than elves.
The glow color is now a new field in artilist[], so the biggest part
of this patch is adding an extra value to each artifact's definition.
Changes to be committed:
modified: dat/history
modified: doc/Guidebook.mn
modified: doc/Guidebook.tex
- include new 3.6.0 beta testers in dungeoneers list
I couldn't figure out why walking over a container in a shop might
give the wrong price; the code looks correct. But I've reorganized
get_cost_from_price to perform the cheapest tests first. The u.ushops
check should probably be done in doname to avoid calling this routine
at all 99.99% of the time.
Reported for pre-beta, getting "you feel disoriented" when attempting
to teleport within a level while carrying the Amulet, you still ended
up teleporting. Wizard mode allows the disorientation to be overridden
but the logic was wrong. It worked as intended when in wizard mode but
unintentionally always overrode disorientation when not in that mode.
Revise the menucolor parsing (color and attribute portion, not the
regexp part) to switch to the string matching used for wishing in
order to allow space in the "light <foo>" entries instead of forcing
the two words to be run together. Having them be run together still
works, as does use of dash or underscore to separate the two words.
So the canonical form for light blue is now "light blue" instead of
"lightblue", but all of "light blue", "lightblue", "light-blue", and
"light_blue" match it. (So do weird things like "--li-gh_-_tbl ue _"
but I won't lose any sleep over that.)
Almost all of this if formatting; mostly blank line after declarations
but also there was new stuff that didn't match the recent reformat.
Make Orcrist glow light blue when orcs are present, just like Sting.
(Sting supposedly glowed because it was made by the elves of Gondolin
rather than any particular attribute built into it, and Orcrist was
made there too. I think it also glowed in the Hobbit; that was how
Bilbo recognized what the situation was when he first saw Sting glow.
Maybe it was the other sword rather than Orcrist, but they were treated
as being functionally equivalent.)
Also make Grimtooth glow red when elves are present. That's from thin
air, to give it some novelty. Unlike Sting, whose double-damage bonus
is restricted to orc targets, Grimtooth's weak 1d6 bonus still applies
to all targets.
ckunpaid() had the same coding error as allow_category(). A hero-owned
container holding hero-owned contents followed in invent an any unpaid
object was mis-classified unpaid.
to polymorphed into something which is hiding under an object.
Also, make the attempt to name a floor object while hallucinating give
a more interesting result.
Implement Boudewijn's suggestion that #name be extended to allow naming
something of the floor. I'm sure he wants this so that he can avoid
picking up gray stones, but it's something I started to implement years
ago (probably at an earlier suggestion from him...) and then forgot all
about.
This changes the #name menu to be
m - a monster
i - a particular object in inventory
o - the type of an object in inventory
f - the type of an object upon the floor
d - the type of an object on discoveries list
a - record an annotation for the current level
What do you want to name?
with the i and o choices omitted when inventory is empty. If the
'lootabc' option is set it will use a through f instead, but then the
last three entries change letters when inventory is empty. 'y' and 'n'
are still accelerators (effectively hidden choices) for the i and o
entries, corresponding to the answers for the 3.4.3 and earlier "name
an individual object?" prompt.
The floor choice asks you to pick a location. If you pick yourself,
then the top object of the pile underneath you is targetted. Otherwise,
the target must be an object glyph, and the object must have its dknown
bit set, so have previously been seen up close or revealed via blessed
potion of object detection. To make it be more useful, targetting an
object on an adjacent square will set the dknown bit. (Just the top
object if there is a pile there.) There's no cockatrice corpse touch
check since you aren't actually touching anything, just looking.
The setting of dknown bit for an adjacent object has been extended to
the '/' and ';' commands for examining things on the screen as well.
It's only done for adjacent spots you actively select, not all 8 spots
around you.
Give an alternate message if Sting starts or stops glowing while the
hero can't see. It probably ought to give an immediate message when
blindness toggles but that looks like it could get messy.
Having an 'o' die or migrate off level should probably also redo the
Sting message immediately, otherwise we see things like:
The little dog kills the goblin.
The little dog eats a goblin corpse.
Sting stops glowing.
(There could be lots of additional intervening messages depending on
other monster activity at the time.) Calling see_monsters() in the
relevant places--probably m_detach() and migrate_to_level()--would
address this but won't do because that could result in hallucinating
monsters changing appearance mid-turn.
'Du' in a shop was listing hero-owned containers that didn't contain
any unpaid items. At least one unpaid item must be carried; bug
manifested iff one or more unpaid items followed the container in
the invent list.
Recently revised allow_category() was using count_unpaid() for
container contents incorrectly, inadvertently checking the rest of
inventory after the container in addition to its contents.