> When you kick iron bars, it says "you kick empty space". Maybe
> this should be something more like "you hurt your foot on the
> iron bars" or "the bars resonate with your hit". Something other
> than "empty space". [<email deleted>]
<Someone> thought the incorrect grammar in the messages was due to scatter()
changing the quan of treefruit, but in fact, it was due to treefruit
referring to the wrong object (there is also a theoretical possibility that
treefruit can refer to a merged object with the wrong count). Create a temp
object for use in the message to avoid these possibilities.
<Someone> noted that if you dropped a box while levitating, nothing would
break. This is true for sacks too, which shouldn't be immune either.
Throwing didn't break contained objects either, not mentioned in his report.
Refactored out the code in kick_object that handled damage for objects
contained in normal containers and added calls in hitfloor and throwit.
kick_object still only calls it for boxes, but other callers will call it
for any object letting it decide if damage is required. BoH objects aren't
affected, since traditionally the inside of the BoH is "somewhere else".
1) make two-weapon combat perform two attacks instead of always either
hitting twice or missing twice;
2) address <Someone>'s report of weapon skill to-hit adjustment being ignored
for bare-handed and martial arts attacks;
3) address newsgroup complaints about the intrusive "your armor is rather
cumbersome" message given every time a monk wearing a suit attacks;
this implements the suggestion that it only occur for those times where
you miss because of the penalty involved, suppressing it when you miss
due to other reasons and when you successfully hit;
4) bonus fix: a side-effect of #3 is that the order of the messages "your
armor is cumbersome" and Stormbringer's "bloodthirsty blade attacks" is
inverted, making a sensible sequence instead of implying precognition.
>More worrying is the fact that applying a figurine over water lets
>the monster wait until its next move before it drowns (giving
>you time to teleport it to safety, or whatever) [...]
>Should there be a minliquid() check as part of make_familiar()?
Applying at the water location next to you was easy. But
applying it at your own location (triggering BY_YOU) could
end up placing the figurine at the far side of the level if
there was lots of water.
Correcting that required the ability to pass a flag from
make_familiar to makemon() telling it to not rule out
water locations as good positions. The flag had to
be passed on down to goodpos() and enexto().
The bulk of this patch is just adding an additional
argument to goodpos() in all of the callers.
Building with an old version of gcc with various warnings enabled
generated a lot of noise. Most of it was due to not guarding string
literals with `const', but there were a couple of actual problems too.
Move a block of kicking code so that freeing items stuck inside
solid work takes precedence over breaking open containers. Now the
box has a chance to fall out like other types of objects (and if it
fails that chance, there's just the normal message about not coming
loose--no attempt to actually kick open the box will occur).
changes the ouch:fruit:bees probabilities from 93:7:0.4 to 75:23.5:1.5.
The 75% "ouch" case sometimes also gives you a buzz.
Explain why sometime fruit that "fell from the tree" end up stuck back
in the tree, requiring more kicking (even though this is less likely
now that scatter() is improved).
> I'm working on a Nethack port, and one of the header files a
> library uses has a structure with a member named "red". Since
> includes/decl.h #defines red to something, this totally loses.
>
> Attached is a patch which fixes the color defines.
<email deleted> wrote in the newsgroup:
> "You've attracted the tree's former occupants!"
> (nothing happens)
>
> Yes, it's _zero_ to four bees, depending on your luck. I think it's meant
> to be one to five, though.
>
- Breaking wand of digging dug through rock which should be undiggable.
Checks assumed pits would never show up in solid rock.
- Breaking wand of digging near shop walls wouldn't anger the shopkeeper
Checks assumed pits would never show up in walls, also, added a special
case to pay_for_damage to handle the case where you're falling thru and
can't be asked to pay.
- Shop walls wouldn't be restored if there are pits in the way.
Checks assumed pits would never show up in walls.
- If there was a hole outside the shop, you could kick stuff out of the
door into the hole without shopkeeper noticing. Added the missing check.
Kicking a monster as a monk or samurai or while wearing kicking
boots might make it "reel from the blow" and be knocked back a step.
If that knock back put it into a trap which killed it, the kicking
code would kill it an extra time, then the player would get a warning
about dmonsfree finding the wrong number of dead monsters.
Pat forwarded a message from the newsgroup in March that the town guards
enforce rules even outside the town proper. Fix: On room-based town levels,
check if the location is in a room containing subrooms (roomno will often
have a subroom id instead). On the other levels (e.g. minetn-5), there are
no subrooms, so the whole level is fair game. Currently, this is valid.
If fancier towns are added in the future, more flags or use of regions may
be required to tell where the town border actually is. These checks are done
in a new in_town function.
Fixes 2 bugs:
1) an impossible() could occur if you applied a lance against a long worm
because the code uses thitmonst to do the hitting, but didn't set bhitpos,
which is required before calling thitmonst.
Add the missing assignment.
2) applying a lance would never mark a knight as a caitiff. Added a new
check_caitiff function and called it from the 2 existing checks and in
the lance code.
<Someone> reported that kicking [unlike hitting] an unseen monster
to death would leave an "I" on the screen. This was due to a missing
DEADMONSTER check. I also noticed that code to avoid leaving an extra "I"
behind when a monster jumps of of the way was only half right, resulting in
an extra "I" anyway.
Based on the limited research I've done, it does not appear that crocodiles
of any size have legs that can effectively kick doors, chests, et al. They
could kick objects, but kicking a monster would be more of a claw attack.
It's simpler to just print a message in all cases.
If you stepped on an unknown rolling boulder trap, and that rolling boulder
hit a monster and killed it, you would be called a killer. This makes
playing a pacifism conduct game rather difficult.
- track boulders from unknown rolling boulder traps, and don't charge/credit
hero if they kill monsters. This is done by temporarily setting otrapped on
such boulders.
- boulders from known traps are still charged/credited to the hero
- fix a couple places in ohitmon where is_poisonable wasn't checked along
with opoisoned.
- this was a betabug I think, but not recorded as such
- if you kicked a throne, any GEM_CLASS item could be generated, including rocks
- changes behavior to be consistent with gems from fountains
- watch messages if you can't see the watch now start "You hear"
- unseen spellcaster messages are shown as "Something", to remove
some silly message pairs.
- unseen spellcaster that casts at itself causes no message
- recalc vision before spoteffects messsages, to avoid invalid "It"
over the place.
Often they would use
"%ld zorkmid%s", amt, plur(amt)
but not consistently, so some of the hard-coded usage
could result in "1 zorkmids"
This adds the function
currency(long)
to return the name of the currency, either plural
or singular depending on the argument passed to it.
That eliminates the need for the extra %s in the
format string and the use of the plur() macro.