Commit Graph

80 Commits

Author SHA1 Message Date
PatR
02db340cd6 spell lint
Mark an unused function argument as UNUSED.  Also, hurtle_step is
the recoil from throwing or kicking while levitating, which isn't
related to the recently added spellcasting line-of-sight check, so
rename spell_hurtle_step to spell_aim_step.
2016-06-23 06:21:58 -07:00
Pasi Kallinen
3eb919d5ab Fix #H4411: Targeting detected monster through wall with fireball
Fireball and cone of cold could target detected monsters
through a wall when cast at skilled or higher.  This allowed
eg. targeting the Wiz from outside his tower.

Use walk_path to determine the actual location where the
spell will hit, so trying to cast through a wall will
make the explosion happen at the nearest empty space.
2016-06-20 09:11:56 +03:00
Pasi Kallinen
3502cfcc5a Hallucinatory liquids for water, lava, and acid 2016-06-07 20:57:50 +03:00
Pasi Kallinen
a157c4873d Fix typo 2016-06-07 08:58:52 +03:00
PatR
894d6c6859 detection revamp
Change most instances of detection to offer the player a chance to
move the cursor around on the map so that the getpos() autodescribe
feature can explain things that might go away as soon as the
current detection completes.  The few instances that don't offer
such a chance are the ones where everything which has been revealed
will still be there once the action finishes (such as regular magic
mapping and blessed/persistent monster detection).

There were quite a lot of inconsistencies in things like handling
for detection while swallowed or underwater.  I didn't keep track
of them to distinguish between 3.6.0, current dev code, or my patch
in progess.  They should be much more consistent now but without a
comprehensive fixes36.1 entry.

Blessed clairvoyance (divination spells at skilled or expert) now
shows monsters as well as terrain.  I first had it like that for
any clairvoyance, but having getpos/autodescribe kick in every 15
or 30 turns once you have the amulet--or pay the appropriate amount
to a temple preist--was nearly unplayable.  When it only follows an
explicit spell cast it is not intrusive.
2016-06-02 01:08:34 -07:00
PatR
13c40d85e7 fix #H4275 - blinded, stunned, confused timers
Blindness due to face covered by pie was ignored for several cases
of magically curing blindness--cleaning the face seems better than
adjusting timeout to account for u.ucreamed for those cases.  A few
instances of taking stun or confusion damage overrode existing stun
or confusion rather than increasing it.  Plus a copy/paste mistake
for dual stun+confusion when casting an expired spell.

There was also a suggestion that vomiting when already nauseated
should decrement the timer instead of increasing it.  But there is a
negative effect for as long as it's in effect, so I left that as is.
2016-03-15 01:00:36 -07:00
PatR
54325de339 fix bz16 - book becoming cursed while being read
Attempting to read a cursed spellbook fails with a nasty effect.  But
a non-cursed book can become cursed while being read (malignant aura
after Wizard has been killed).  Assuming no interruption for other
reasons, the read would finish, the spell be learned, and then the
nasty effect would be given.  This changes things so that if the book
being read becomes cursed and the hero notices (book's bknown flag is
set), the read-in-progress will be interrupted.  Resuming will take
the attempting-to-read-a-cursed-book path.  Unfortunately, if the
hero doesn't notice, the old behavior still applies.  Maybe the new
behavior should happen even if bknown isn't set (but then player
won't be told why the interruption occurred).
2016-01-31 18:22:31 -08:00
PatR
0d2a4afd81 fix "spellbook of novel" on discoveries list
Avoid "spellbook of novel" after novel becomes discovered.  Now it will
just be "novel".  Prior to discovery, it might be on the list as "book
called whatever" if the player assigns a type name.

Also, make novel become discovered after reading one instead of only via
object identification.  It already shows up as "novel" in inventory, but
changing its definition to designate it as not-interesting-to-discover
feels disrespectful to the tribute.
2015-12-19 20:07:51 -08:00
nhmall
fa092f5fe9 housekeeping for 3.6.1
Changes to be committed:
	modified:   Files
	modified:   README
	modified:   dat/history
	modified:   doc/Guidebook.mn
	modified:   doc/Guidebook.tex
	modified:   include/global.h
	modified:   include/obj.h
	modified:   include/patchlevel.h
	modified:   src/invent.c
	modified:   src/objnam.c
	modified:   src/shknam.c
	modified:   src/sounds.c
	modified:   src/spell.c
	modified:   sys/winnt/Install.nt
	modified:   sys/winnt/nethack.def
	modified:   win/macosx/NetHackGuidebook.applescript
	modified:   win/macosx/NetHackTerm.applescript
	modified:   win/win32/mswproc.c
2015-12-16 17:52:34 -05:00
PatR
c843f56897 fix #H4078 - dull spellbook vs sleep resistance
Reading a dull spellbook could make a sleep resistant hero fall asleep.
2015-12-14 13:27:31 -08:00
PatR
c40982eb23 tribute enhancement
When reading a novel, select a random passage which hasn't been shown
already.  Once you've run through all the passages, it resets to get
them all again (with new random order that might happen to the be same
order if there aren't many passages).  Switching to a different novel--
even another copy of the same one--will cause the previous passage
selection to be discarded and restarted from scratch if the prior book
is read again.  Passage tracking for the most recently read novel is
kept across save and restore.  (That means I needed to bump EDITLEVEL,
so it will need to be reset to 0 again before release.)
2015-11-15 21:57:15 -08:00
Pasi Kallinen
464bb3a1f4 Rephrase version number in comment 2015-11-07 09:06:13 +02:00
PatR
449084fa6c eliminate implicit concatenation of strings
Explicitly combine adjacent string literals so that pre-ANSI compilers
still have a chance to compile the code.  I thought these had already
been dealt with, but I kept stumbling across them while reformatting,
so am trying to get them all out of the way now.
2015-11-06 15:57:23 -08:00
Pasi Kallinen
99925ff155 Update version numbers in source comments 2015-11-06 16:05:36 +02:00
PatR
c48e1732d8 spellcasting bug fix: confusion duration
Fix the reported bug that attempting to cast an expired spell, which
causes confusion and/or stun, was replacing the duration of any existing
confusion or stun with the new amount rather than increasing it by that
amount.

Attempting to cast any spell while stunned will now fail immediately,
and casting an expired spell while confused will increase confusion
duration (and/or set stun duration) rather than override it.
2015-11-04 02:27:59 -08:00
PatR
8a5f340579 commit 84bec89d403a219ff75ae3fa97109de0cfb7941f
Author: PatR <rankin@nethack.org>
Date:   Fri Oct 30 00:50:52 2015 -0700

    more formatting

    Fix up the files containing '[?:] */' to get trailing trinary operator
    followed by end-of-line comment.  Tab replacement and removal of excess
    parentheses on return statements also done.
2015-10-30 00:58:06 -07:00
PatR
bb09cab067 formatting: src/r*.c - src/s*.c continuation lines 2015-10-26 17:49:40 -07:00
Pasi Kallinen
af1c77808b Comment typofixes, pt 4 2015-10-17 18:47:31 +03:00
PatR
bd3244835e spell of protection
Another item from the "A few bugs" mail.  Casting spell of protection
when previous casting(s) hadn't timed out yet miscalculated the new AC
boost.  At low levels--when this spell probably gets its most use--the
bug wasn't noticeable.  (At high levels when someone might cast it a
whole bunch of times in succession, the effect could be noticed but
was probably just assumed to be working as intended.  Its behavior is
somewhat convoluted.)
2015-10-08 02:19:58 -07:00
nhmall
0353207f02 a couple more tribute easter eggs
Changes to be committed:
	modified:   include/context.h
	modified:   include/extern.h
	modified:   src/files.c
	modified:   src/invent.c
	modified:   src/sounds.c
	modified:   src/spell.c

Add a couple more tribute easter eggs.

 - can lead to a remark by Death if you happen to have a pratchett book on
   your person, as suggested by M. Stephenson (fat chance you will, or
   think to #chat if you do, but it could be a tournament novelty or something
   obscure to strive for).
 - can draw some additional Death quotes from the tribute file. (There's two
   in there right now. If anyone wants to add or suggest some more, please go
   ahead. The Death quotes are at the end of the tribute file. One-liners
   only please or the code will only pull the last line.
2015-06-15 22:22:56 -04:00
Sean Hunt
1c081b1647 Remove stale version control lines. 2015-05-25 09:21:31 +09:00
Sean Hunt
97d6fade74 Reformat all C files.
I'll push a formatting guide at some point. There may still be
outstanding changes, but please feel free to resolve those as you arrive
a them.

To the best of my knowledge, there is no changes to the actual code
content, but the formatter does have the occasional bug. If you run into
an issue, please fix it!
2015-05-09 13:43:16 -04:00
karnov
2a907f894e Version number increment 2015-05-06 22:04:27 -04:00
Pasi Kallinen
f83523eeb4 Make spell list title obey menu_headings 2015-04-28 14:13:01 +03:00
PatR
6cad21e4e8 tribute in-game bonus
Give 20 experience points the first time the hero reads a passage
from a tribute novel.  It's enough to go from level 1 to 2 or from
2 to 3.  By the time a book store is found, that's too trivial for
most to care about, but it's potentially useful to a pacifist.
2015-04-20 00:05:00 -07:00
nhmall
0fdcea70c6 suggested booktribute mods
Changes to be committed:
	modified:   include/extern.h
	modified:   src/files.c
	modified:   src/objects.c
	modified:   src/spell.c

- charge a little more.
- no free read in the bookstore.
2015-04-18 17:45:27 -04:00
nhmall
c43e8f9d31 Merge branch 'master' into nhmall-booktribute
Conflicts:
	include/context.h
2015-04-02 19:19:50 -04:00
Pasi Kallinen
fa4dda377d Move isqrt into hacklib, other minor fixage 2015-04-01 16:38:56 +03:00
Pasi Kallinen
411ee58593 Add more explicit helpless reasons
Instead of just "while helpless", the death reason will tell
more explicitly why the player was helpless.  For example:
"while frozen by a monster's gaze"
2015-03-29 22:12:19 +03:00
nhmall
d7ff451301 More book tribute integration 2015-03-21 10:33:59 -04:00
nhmall
0a8d24d87d more updates to the bookstore tribute 2015-03-20 00:58:29 -04:00
nhmall
d01bec9fae rare books store tribute 2015-03-18 21:47:18 -04:00
Sean Hunt
777328bd5c Merge fire-based erosion to common codepaths.
This finally eliminates all direct increases of `oeroded` and `oeroded2`
and moves them all to go via `erode_obj()`. They are still manipulated
directly in a few places, but not to erode objects.

This now merges the `fire_damage()` function to a common codepath, used
for items on lava and burning oil, but fire needs more work. There is
still a duplication between `destroy_item()` and `fire_damage()`; the
two codepaths should eventually be merged in some manner so that there
is only one codepath to say "an object was affected by fire". This path
might require some parameters, such as whether the fire will just erode
objects or burn them outright, but that can happen another day.
2015-03-02 12:50:03 -05:00
Sean Hunt
57dcad3774 Rename rust_dmg() to erode_obj(). 2015-03-02 12:50:01 -05:00
Sean Hunt
3a049cf66e Eliminate erode_obj() and other erosion.
Now all erosion that isn't fire-based goes through `rust_dmg()`
2015-03-02 12:50:00 -05:00
keni
03140969ee Bulk recovery of file CVS headers and addition of NHDT- headers. 2015-02-26 09:19:03 -05:00
keni
fde6b47810 another try. spell.c 2011-12-29 22:01:25 +00:00
keni
db9b434f93 fix one compiler warning (first attempt to probe for cvs email bug) 2011-03-05 20:32:37 +00:00
nethack.rankin
0ee120b9b5 forgetting spells due to amnesia (trunk only)
From the newsgroup, losing spells to amnesia always took away the
last 'N' spells after choosing a random N.  That kept casting letters
sane, since letters for lost spells became invalid and those for non-lost
ones stayed the same as they were before amnesia.  But 3.4.x gave the
player the ability to swap pairs of spells, so he could make his favorites
to be the first spells, and only lose them if the random number of spells
being affected was as large as the whole list.  (Also, divine spellbook
gifts give preference to books for unknown spells; in theory, you could
use spell letter manipulation plus deliberate amnesia to make a particular
spell revert to unknown in order to improve the chance of getting a new
spellbook for it.  A bit of cleverness by a determined player but it
makes the game and/or its patron deities seem a bit dumb in the process.)

     I first implemented losing spells throughout the list, with later
spells moved forward to fill any gaps.  But that results in new casting
letters for every spell past the first lost one, potentially wreaking
havoc if a player chooses a casting letter from his own memory of the
pre-amnesia list.  So, instead of losing some spells entirely, either
from the end of the list or spread throughout, I've changed amnesia to
set the retention amount (of N spells from throughout the list) to zero,
the same as happens when it's been 20000 turns since the spell was last
learned.  Letters for all known spells stay unchanged, and forgetting
due to amnesia becomes the same as the other way of forgetting spells.
(So now a different potential clever use of amnesia occurs; a player who's
trying to a make speed ascension could get access to expired spells--to
cast in order to become confused--without waiting for 20000 turns after
reading the first book.)
2010-07-27 03:08:04 +00:00
nethack.rankin
2dfe3f45c1 spell_damage_bonus (trunk only)
From the newsgroup:  player saw "The spell hits the <monster>?"
where the question mark punctuation reflected negative damage occurring.
Another player diagnosed it as a 2 point force bolt (from 2d12 dice role)
modified by -3 penalty for hero who has Int less than 10.  This changes
spell_damage_bonus() to avoid reducing damage below 1 point.
2009-05-27 09:19:11 +00:00
keni
4eabcee787 Add RCS version lines 2009-05-06 10:50:32 +00:00
nethack.rankin
ef3f758569 dull spellbook (trunk only)
Something else <Someone> forwarded from the newsgroup long time ago:
attempting to read a dull spellbook ought to have a chance of making the
hero fall asleep.
2007-05-29 02:51:47 +00:00
nethack.rankin
a29b06ac2f spell of protection feedback
From the newsgroup (subject: "3 xorn fixes"):  casting spell of
protection would report "the air around you begins to shimmer" even when
you were embedded in rock or swallowed.  It included a pointer to a patch;
I looked at that but ended up not using it.
2006-12-07 05:27:18 +00:00
nethack.allison
999424aecc more zeroany (trunk only) 2006-07-09 17:39:43 +00:00
nethack.allison
d09c374239 function pointer assignment warnings in VC2005
The latest Micrsoft compilers complain when a function is
assigned to a function pointer, and the function's argument
list does not match the prototype precisely.
It was evem complaining about the difference between this:
     int x()
     {
        [...]
     }
and a prototype of
     int x(void);
when assigning that function's address to a function pointer.

This quiets those warnings, without suppressing the mismatch
check altogether for more serious mismatches.
2006-06-25 19:54:31 +00:00
nethack.rankin
aec65a0acb player control of spellbook order (trunk only)
Add the capability of sorting the entire spellbook by various criteria,
augmenting the existing ability to swap pairs of spells.  In the menu that's
put up for the '+' command, add a non-spell entry after the last known spell
        + - [sort spells]
Selecting that brings up a new menu

        View known spells list sorted

        a + by casting letter
        b - alphabetically
        c - by level, low to high
        d - by level, high to low
        e - by skill group, alphabetized within each group
        f - by skill group, low to high level within group
        g - by skill group, high to low level within group
        h - maintain current ordering

        z - reassign casting letters to retain current order

'a' corresponds to the normal ordering; 'b' through 'g' cause the order
to change, but during the current invocation of the '+' command only.
(Entry 'h' is a no-op, something aside from ESC to get out without doing
anything.  'a' is only a no-op if you haven't picked any of 'b' through
'g' yet.)  After making a choice, you're taken back to the '+' command to
view the spells in the requested order.  And once back there, you can pick
'+' again to come back to this menu, where picking 'z' will cause casting
letters to be shuffled such that present display order becomes the actual
spellbook order.  Newly learned spells get appended to the end as usual;
the most recent sorting order isn't sticky even if finished off with 'z'.

     No doubt seeing it in action will be clearer than this description.
This also updates the Guidebook to mention the spell retention field added
to the '+' menu some weeks back.
2006-05-18 04:18:28 +00:00
nethack.rankin
73e9225d88 scroll usage; also spell of ID (trunk only)
Make a not-very-robust fix for the report from <email deleted> about
being told a scoll disappears as you read it, then for the case of cursed
remove curse being told that the scroll disintegrates.  He missed similar
case for scroll of fire erupting into flames after it had disappeared.
This suppresses the "disappears" part of the scroll reading message for
those two cases, but won't be very reliable if other scroll messages
referring to the scroll itself get introduced in the future.  [Several
paths through scroll of fire won't report that it burns, and now it doesn't
give the disappears message any more.  I don't think that's worth worrying
about; the scroll leaving inventory after burning up is implicit.]

     Also cut down on redundant feedback for several scrolls (genocide,
charging, identify, stinking cloud) that start off by informing the player
what they are.  That's only needed when the the player doesn't already
know the type of scroll.  I've always felt it silly to be told that I've
"found a scroll of genocide" when I'm intentionally reading a known scroll
of genocide.  All these types of scroll give a subsequent prompt which
makes them recongizable if you somehow manage to choose the wrong object
when picking the one to read.

    Lastly, make spell of identify behave like ordinary uncursed scroll of
identify by default instead of ususally ID'ing multiple items.  Now you'll
need to be skilled or better in divination spells skill in order to get the
blessed scroll effect out of it.  And give some feedback if the spell is
cast when not carrying any inventory; it was just silently moving on to the
user's next command in that case.
2006-02-16 06:44:24 +00:00
nethack.rankin
458c90fd7e couple of spell bits (trunk only)
Move NO_SPELL and MAX_SPELL_STUDY from hack.h to spell.h.  I didn't
even remember that the latter existed when I put MAX_SPELL_STUDY in the
former recently.

     Add a couple of new "spell is almost gone" messages that occur when
casting spells.  One matches up with yesterday's change for when you can
re-read a spellbook to reinforce memory of a known spell.

     When "too hungry", you can't cast any spells, except detect food so
that you can find something to eat.  When "too weak" you couldn't cast any
spells at all; now you can cast restore ability so that you can recover
lost strength.  [We still need to come up with a better crowning bonus for
monks than spellbook of restore ability.]  I couldn't think of a reasonable
exception for the "can't cast when carrying too much" restriction.  If we
can come up with one (levitation?), then remove curse could/should become
an exception for the "no free hands" restriction.
2006-02-12 06:24:25 +00:00
nethack.rankin
3096fc47dc spell retention feedback (trunk only)
Instead of just marking forgotten spells with an asterisk, add a new
column to the '+' spell menu which gives an estimate of how well the spell
is remembered.  Precision of the estimate depends upon the hero's skill in
the category of spell; expert gets the most detail with a low-to-high range
spanning just 2%, such as 19%-20% or 75%-76%; skilled sees 5% ranges; basic
10%, and unskilled the least detail with 25% ranges (ie, one of 1-25, 26-50,
51-75, or 76-100 for percentage of time left available for the spell).
[The tab-separator variant for the menu is untested.]

     This fixes an off by one bug for spell retention.  It got set to 20000
as intended when a spellbook was read, but then it would be decremented to
19999 before the player had a chance to do anything else, cheating him out
of 1 turn of memory.  Spells known at game start last exactly 20000 turns.

     Also, adjust the point at which you're allowed to reread a spellbook
and refresh your memory of the spell.  When the current spell system was
instituted, that was 10% of the retention period (1000 turns or less left
out of 10000); when retention got doubled to 20000 turns, the relearn point
was left as is.  Increasing it to 10% (ie, doubling to 2000) makes it fit
better with the displayed retention percentages.  Otherwise expert casters
would be left to guess when they've hit that point (1000 is 5%, falling
within their 5%-6% range, which really indicates (4%+1) to 6%).  At 10%,
it's the threshold for the 9-10 range for experts, 5-10 range for skilled,
and 1-10 range for basic so the player can see when it has been reached;
only unskilled, with a bottom range of 1-25, is left to guess.  Players
will likely prefer to wait until later, when the spell is nearly expired,
to refresh, but if they're about to abandon their books on the way to the
endgame then being able to re-read sooner is beneficial.
2006-02-11 06:35:41 +00:00
nethack.rankin
24e15f7b2e `spestudied' manipulation again (trunk only)
Refine last week's change dealing with polymorphing spellbooks:  when
a spellbook has faded to blank after multiple readings, randomize its
spestudied value so that it doesn't always polymorph into another blank
book on the first subsequent transformation attempt.
2006-02-07 05:20:16 +00:00