Commit Graph

84 Commits

Author SHA1 Message Date
cohrs
15bd245d2b old bug report: unchanging iron golem still rehumanizes
Calling rehumanize directly when u.mh > 0 doesn't consider Unchanging
(perhaps it should?).  But, it's probably better to call losehp anyway.
Also, part of a buglist item: .5PD didn't affect rust trap damage on iron golem
2003-10-21 04:28:16 +00:00
cohrs
b2ffe64968 breaking migrated objects
Allow migrated objects to break on arrival.  Added code to obj_delivery to
cause this, along with a flag to keep breakage from occurring.  The new
flag isn't used yet, because all the current object migration involve
objects that were moving/dropping.  To help make this change, rloco now
returns whether the object was placed or not, so caller can know if an obj
pointer is still valid or not.

Making the breakage messages for MIGR_NEAR_PLAYER objects show up after the
new level is displayed required some effort (rather than while the old level
was still displayed, which was confusing), due to the needs of goto_level.
- obj_delivery now has 2 passes, one for before player arrives, another after,
allowing the two cases to be treated differently
- goto_level calls obj_delivery twice (run_timers is not called twice,
since the run required before the level is displayed will have already run
any timers on migrating object)
- kill_genocided_monsters now kills eggs on the migrating_objs list too
2003-10-18 22:55:42 +00:00
nethack.allison
4cbdae2d3b > - When polymorphed into a flying creature and being grabbed
> over the water, then polymorphed into a non-flying creature
> leaves you standing on the water (you can kill the creature
> too and you're still on the water when you shouldn't be).
> - When floating from levitation over water and being held and
> removing levitation, you will fall into the water and drown or
> crawl back onto land. If you crawl back onto land you're no
> longer being held.
> The first situation seems to be a bug, the second a possible
> exploit. Both situations don't seem very correct, if you're
> being held it seems you should not fall into the water/lava
> until you are no longer being held. [patch contributed] It
> will keep the hero held up on over the water until released if
> his size is smaller than or equal to the size of the monster
> holding him. [<email deleted>, patch
> supplied]
>

A recent patch ensured that you ended up in the water when
polymorphed.

This patch is less ambitious than <Someone>'s
contribution, where he actually had the monster hold you up.
Perhaps that can be tackled for the trunk later.
2003-10-18 14:59:29 +00:00
nethack.allison
6712fc1b04 melting ice (trunk only)
add a new melt_ice_away timer for ice created via zapping
a wand/spell of cold.

Some follow-up adjustments to the length of time before
the ice melts may be necessary. Ideally, I'd like to
have it so that the shorter the length of time since
the ice was created, the lesser the chance that it will
melt out from under you.  Likewise, the longer it has
been, the more risky it will be to venture onto it.

At the moment, however, each spot of ice is just
getting a somewhat random time always greater
than 50, which is less than ideal.
2003-10-12 04:21:27 +00:00
cohrs
559be58c21 conflicting delayed killers
Introduce a new set of functions to manage delayed killers in the trunk, used
in addressing the various reports of delayed killer confusion.  Since existing
delayed killers are related to player properties, the delayed killers are
keyed by uprop indexes.  I did this to avoid adding yet another set of
similar identifiers.
- the new delayed_killer() is used for stoning, sliming, sickness, and
delayed self-genocide while polymorphed.  Some other timed events don't
use it (and didn't use the old delayed_killer variable) because they
use a fixed message when the timeout occurs.
- A new data structure, struct kinfo, is used to track both delayed and
immediate killers.  This encapsulates all the info involved with
identifying a killer.  The structure contains a buffer, which subsumes the
old killer_buf and several other buffers that didn't/couldn't use killer_buf.
- the killer list is saved and restored as part of the game state.
- the special case of usick_cause was removed and a delayed killer list
entry is now used in its place
- common code dealing with (un)sliming is moved to a new make_slimed function
- attempted to update all make dependencies for new end.c -> lev.h
dependency, sorry if I messed any up
2003-09-29 19:24:20 +00:00
kmhugo
e1f5ddd820 sound cleanup
+ Separate the two uses of flags.soundok.
+ Player-settable option is now called "acoustics".
+ Deafness is now handled as a full-fledged attribute.
+ Check for deafness in You_hear(), rather than caller.
+ Check for deafness in caller, rather than verbalize(),
  because gods can speak to characters in spite of deafness.
+ Since changes are being made to prop.h, reorder it to the
  same order as youprop.h and enlightenment.

There are still some extraneous checks and missing checks
for deafness, which will be followed up in a future patch.

Because of the size of this patch and its savefile incompatibilities,
it is only being applied to the trunk code.  Portions of this patch
were written by Michael Allison.
2003-09-28 03:42:50 +00:00
nethack.rankin
0288c5321a animation of wielded statue
Fix the reported bug of problems after casting stone-to-flesh spell
on self while wielding a statue.  Pointers for worn items weren't kept in
sync and various potential symptoms could occur (most easily visible one
being that ')' falsely reported the no longer existing statue as still
wielded; report stated that one crash was observed).  This bug predates
3.4.2 and was probably present ever since stone-to-flesh got introduced.
2003-09-26 10:27:36 +00:00
nethack.allison
22ce5ed6f2 trunk only: preserving context (src files)
Pat Rankin wrote:
> collect them all into some new struct and
> save that separately rather than jamming more non-option stuff
> into struct flags.

This patch:
- collects all context/tracking related fields from flags
  into a new structure called "context."
It also adds the following to the new structure:
- stethoscope turn support
- victual support
- tin support
2003-09-21 11:52:54 +00:00
cohrs
5e443536d8 "your" artifacts
This patch introduces a change to yname() and Yname2() that avoids the
possessive "your" for the hero's normal, fully identified artifacts.
Quest artifacts still get the possessive, as do all other objects and all
objects not in the hero's possession.  shk_your()/Shk_Your() are used in
many places with a specific, generalized name for the object, so I didn't
introduce the artifact behavior there, although I did change them to append
a space, which simplified some other code.  Through added use of yname(),
there may be some places that used to just say "corpse" that will now be more
descriptive via yname()'s use of cxname().  I'm sure <Someone> will point
out any such places that are too onerous, although nothing obviously is.

I took the opportunity to inspect many uses of "your" and even Your().  Two
new functions are also introduced, yobjnam() and Yobjnam2(), which work
like aobjnam() and yname() combined, because I found that many uses of
aobjnam() were preceeded by "your" and I couldn't generally provide the
desired behavior for artifacts (or future artifacts) without a combined
function.  In some cases, this change allowed better sharing of code.

rust_dmg() still takes a string as input which is sometimes initialized
from xname() and often prepends "your" to it.  Currently, this isn't a
problem since there currently are no normal, armor artifacts.  If/when any
are introduced, rust_dmg() will need to be addressed.

The patch is for the trunk only.  A lot of research was required and I
didn't feel the upside was there for repeating it in the 3.4.3 branch.
2003-09-18 02:52:40 +00:00
nethack.allison
5eff6601e9 avoid the_your[] duplication
get rid of a duplication of the_your[] strings (do.c, trap.c) by
moving it to c_common_strings.
2003-09-15 02:04:00 +00:00
nethack.allison
416412f92b Remove vestiges of old overlay source split
[trunk only]
2003-09-05 02:45:18 +00:00
nethack.allison
48ab2a434c guardian corpse, statue animation follow-up
- fix ring of protection from shape changers causing
  real monster to be created.
- add ability to get the character class monster from
  genus() or the species.
- use the character class monster when animating
  guardian corpses.
2003-08-19 14:41:54 +00:00
nethack.allison
d72700c070 animating quest guardian statues
Also a related bug: the guard against animating a unique
monster via tossing a statue onto a statue trap location, was
causing stone to flesh to silently ignore any statue of a unique
monster which seemed very uncharacteristic of the spell.

After this patch, statues of quest guardians and statues of
unique monsters will animate as shape-shifters posing as those
monsters, not the monsters themselves.
2003-08-19 02:52:03 +00:00
nethack.allison
43d7d6f27d multiple statues and stone-to-flesh
stone-to-flesh of spot with multiple statues can animate more than one
by using adjacent locations
2003-07-19 12:39:55 +00:00
nethack.allison
f8abb8c8cc B04003 - keep saddle with steed corpse if possible 2003-07-13 13:22:19 +00:00
cohrs
567a501bdd U537 - autosearching while digging a trapped statue
Noticing a statue trap animate should stop your occupation.
That avoids the reported "You hit the  with all your might." message.
2003-07-13 05:17:49 +00:00
nethack.allison
8eb6614a56 fix B04004 "lead steed" into pit after landmine
<Someone> wrote:
	KAABLAMM!!!  You triggered [your|a] land mine!
	You lead the poor warhorse into a pit!
	Is "lead" really the right word here?
2003-07-12 16:59:32 +00:00
nethack.allison
b88e0a13ab fix B04005 and B04006
[B04003 and B04004 are still marked "Reported"]

<Someone>:
> You aren't very skilled at reaching from the saddled blue dragon.
> Continue your attempt to set the land mine? [yn] (n)
> You begin setting your land mine.
> There is the trigger of your mine in a pile of soil below you.
> KAABLAMM!!!  The air currents set your land mine off!
> I somehow suspect that it'd be more than the air currents, if I were
> trying to arm a land mine from dragonback while not very good at
> controlling it.

<Someone>:
> What do you want to use or apply? [cmu or ?*]
> You aren't very skilled at reaching from the saddled warhorse.
> Continue your attempt to set the land mine? [yn] (n)
> You begin setting your land mine.  You escape your land mine.
> Is "escape" really the right word here?
2003-07-12 14:55:44 +00:00
nethack.rankin
678e05096d some lint cleanup
Mostly `gcc -Wwrite-strings' complaining about passing string
literals to safe_qbuf().  `gcc -Wformat' didn't catch the type mismatch
of formatting the return value of strlen() with %d, presumeably because
size_t is defined as unsigned int on this system and it treats int and
unsigned int as interchangeable as far as printf/scanf checking goes.

     I'm not sure whether the sizeof() values being passed to safe_qbuf()
ought to have casts.  Any system where size_t isn't the same width as
unsigned int is bound to support prototypes, but might possibly warn about
the implicit conversion of unsigned long (or even unsigned long long these
days) to unsigned int.
2003-05-31 07:14:21 +00:00
nethack.allison
01120453f2 Fix B03001
"You can't loot or pick up containers on the floor if you're not
skilled enough to reach them from your saddle, but you can check
for and disarm traps on them; this seems a little odd. (Likewise,
being able to set land mines and beartraps while riding.)"
2003-05-25 22:47:12 +00:00
cohrs
dde1a1ceec B03006 - Searching trapped chests
When attempting to disarm a trapped chest, wisdom should only be exercised
when not confused.  It stands to reason that even if you manage to find a
trap in a confused/hallucinating state, wisdom shouldn't be exercised.
2003-05-25 05:04:11 +00:00
nethack.rankin
9a39064b8f more perm_invent handling
Keep permanent inventory window up to date when using charged items.
Also a status line bit for the #tip command.
2003-05-24 04:07:14 +00:00
cohrs
bbaa40993b U472 - untrapping squeaky board with a can of grease
If using a permanent inventory window, the charges weren't updated immediately.
2003-05-21 15:15:27 +00:00
cohrs
619da67425 B02005 - Boulder and vision followup
put back code to remove LAUNCH_UNSEEN from the mask that got lost
when I re-arranged the change.
2003-05-19 13:41:01 +00:00
cohrs
462858bd31 B02005 - Boulder and vision
add another bit to the flags passed to launch_obj so it can print
the initial "rumbling" message at the appropriate time rather than
having the caller print the message, possibly out of order.
2003-05-18 21:04:49 +00:00
nethack.rankin
c4c1b064f7 fix B02004 and other projectile related killer reasons
1) killer reason for scattered land mine shrapnel used "a" or "an" prefix
   even when multiple projectiles hit as a group -- one of various things
   From a bug report.oextra field) --
   noticed while investigating #1 and later From a bug report.4.0 due to an unintentional side-effect of missile killer reason
   handling in 3.4.1 (removal of redundant "poisoned" prefix by m_throw()
   confused the poison handling routine) -- noticed while investigating #3.
2003-05-14 10:25:26 +00:00
nethack.allison
17ad4116b1 rollback one band
Rollback a band that shouldn't have been in recent patch at all.
2003-05-10 21:28:33 +00:00
nethack.allison
6f56da5261 final qbuf patch
This is my final src mod to ensure that a qbuf does not overflow due to
a lengthy named object.  These recent patches, coupled with the core yn_function() patch earlier, should make it much rarer for a QBUFSZ
buffer overflow to occur in a window port routine (unless the window
port routine has its own bugs, but that isn't the core's fault).
2003-05-10 21:11:16 +00:00
nethack.rankin
25d6335de9 two land mine bits
Noticed when investigating one of the killer reason bugs recently
reported:  a land mine explosion shouldn't create a concealed pit trap;
make a revealed pit instead.  And while testing that, I noticed that the
"Kaboom" message given when pushing a boulder onto a land mine was given
while the map still showed the boulder at its original location even
though it had actually been moved already.  It's a little odd that you
get hit by shrapnel at your original position--as if you're shoving the
boulder ahead of you and then pausing a moment before stepping into its
former location--but that's trickier to fix; sometimes you won't advance
due to there being multiple boulders present (in that case you evidently
do shove the boulder instead of performing a steady push, so maybe the
current behavior is fine as it is).
2003-05-03 02:08:34 +00:00
cohrs
18f39cfcdd B01005 - infinite objects from traps
Added a random factor to arrow, dart and rock traps so they'll eventually
stop producing new objects.  Also fixed a bug in mklev that set the trap
"once" flag even for traps where it wasn't currently appropriate.
2003-03-27 03:01:38 +00:00
arromdee
b7fea371b6 statue gender
Reported on the newsgroup (a few weeks ago in the middle of a post about
something else): someone turned Perseus to flesh and found out he was female.
2003-03-24 02:02:08 +00:00
nethack.allison
e2d9e01e84 rndcolor()
> "A cloud of sangria gas billows from the chest.
> You stagger and your vision blurs."
> When I see the gas billowing from the chest, I'm not yet
> hallucinating. Shouldn't the gas have a normal colour, then?
> Only after my vision blurs should the gas assume a fake colour, I
> think.
>
2003-03-12 18:26:17 +00:00
nethack.allison
956c9727b0 more golem stone-to-flesh
Since all golem statues are stone, make them all become flesh.
2003-03-09 22:24:19 +00:00
nethack.allison
30d81e9097 statue of stone golem animates as flesh golem 2003-03-09 18:39:26 +00:00
cohrs
6885f18bb1 steeds don't remember traps
<Someone> reported to the list that steeds didn't remember traps
encountered while mounted.  When not mounted, a monster will remember
traps, even when they don't damage the monster.  To that end, added code to
set the steed's mtrapseen mask.
2003-02-13 05:23:46 +00:00
nethack.rankin
fe05bcf52d falling into water while asleep
Try to fix the reported bug of not waking up if sleeping on ice
that gets melted out from under you.  This fixes the straightforward
case but I suspect there are other permutations that it doesn't cover.
Teleporting out of water is now blocked if asleep; waking up occurs
after the chance for that has passed.
2003-02-11 11:57:14 +00:00
nethack.allison
c2c72d11e7 B18009 animate figurine over water
>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.
2003-02-09 05:39:32 +00:00
nethack.allison
7dbed130dc fix B18010 fatal exploding chest at ball & chain 2003-02-08 22:00:58 +00:00
nethack.rankin
ea400a778d some lint cleanup
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.
2003-01-09 09:18:14 +00:00
cohrs
aabc54549e U189 - killing an engulfing monster over water allows waterwalking
- The code in xkilled failed to call spoteffects after killing the monster
that was engulfing you.  Being expelled already worked correctly.
- While testing this, I discovered that removing a ring of levitation or
similar while engulfed would call spoteffects when it shouldn't.  Fixed
that too.
2002-12-19 01:57:10 +00:00
cohrs
bc88e8440e effect of webs while mounted
Prompted by a message to the list from <Someone> which noted that your
strength controls the traps effect, not the steed's strength, although the
messages say otherwise.  Changed this case to use mintrap to determine what
happens.
2002-11-23 18:36:54 +00:00
cohrs
9b69eb43e5 rolling boulder hits an unmoving boulder 2002-11-18 22:37:38 +00:00
nethack.rankin
211f09b9ee sleep vs sounds
Handle sleeping consistently; of the nine places fall_asleep
is being called, only one of the them actually affected sounds.
The two cases where sleep is used to penalize overexertion aren't
affected.
2002-10-13 10:13:38 +00:00
nethack.allison
55b5e00daa no message 2002-09-09 12:17:13 +00:00
nethack.rankin
5088492cf6 speed of petrified monsters
Someone posted in the newsgroup about using stone-to-flesh
to reanimate a petrified pet and having it come back to life with
boosted speed intact.  When the character gets petrified, stripping
speed is one of the first things which happens, so now do that for
monsters too.  I decided not to make monsters who have normal speed
become slow; there isn't any analogous case for the player.

     Possible bug:  while testing this, I zapped a wand of probing
at a hill orc which had just eaten a lizard corpse to save itself
from stoning.  The feedback said "eating" but the orc immediately
hit and killed me as if it wasn't affected by any movement delay.
2002-08-31 09:24:08 +00:00
cohrs
5d492abf6f R1049 - various wand of digging bugs
- 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.
2002-08-21 23:06:58 +00:00
nethack.allison
fc319a4be0 string constants
<Someone> wrote:
> Linux, Redhat 7.1 nethack 3.4.0
>
>Please see attached patch file.
>
>I'm attempting to move more stuff into the "read-only" area, in
>preparation for a port to another OS.
2002-08-20 08:05:20 +00:00
nethack.allison
2695ca47b4 gas colors while blind
<email deleted> on Sunday, August 18, 2002 at 15:28:18
> comments: player is blind, and not hallucinating (initially). On #loot:
>
> You trigger a trap!
> A cloud of ultraviolet gas billows from the large box.
> You stagger and get dizzy...
2002-08-19 00:00:52 +00:00
nethack.rankin
096b420889 rolling boulder hitting pit which holds monster
From a bug report, a rolling boulder
trap could report that the boulder had fallen into the pit with you
and then let it keep rolling.  flooreffects() only returns true
when it uses up the object being manipulated but it doesn't use up
boulders that hit pits which hold monsters or the hero.  Its caller
needs to handle the cases where the boulder ends up sharing the pit
with a monster.
2002-08-17 10:24:35 +00:00
nethack.allison
3c227928f9 function name format
From <Someone>:
[functions that don't start in leftmost column ]

apply.c:int unfixable_trouble_count(is_horn)
artifact.c:void arti_speak(obj)
botl.c:int xlev_to_rank(xlev)
botl.c:int rank_to_xlev(rank)
display.c:void map_location(x,y,show)
hack.c:static void findtravelpath()
hack.c:void unmul(msg_override)
hack.c:long money_cnt(otmp)
mklev.c:CFDECLSPEC do_comp(vx,vy)
pickup.c:long carry_count(obj, container, count, telekinesis, wt_before, wt_after)
pickup.c:boolean mon_beside(x,y)
shk.c:long money2mon(mon, amount)
shk.c:boolean same_price(obj1, obj2)
shk.c:void finish_paybill()
trap.c:boolean delfloortrap(ttmp)
weapon.c:void give_may_advance_msg(skill)
do_name.c:char *coyotename(mtmp, buf)

(This with a pruned 'egrep '^[[:alnum:]]+ .*\(.*\)$' *.c' in src/; I
haven't looked outside that directory, but generally speaking once you
go beyond there you're widening your search anyway.)
2002-08-12 22:24:05 +00:00