Files
nethack/include/spell.h
PatR e3490743e0 divine gift of spell knowledge
Remove the conduct-specific aspect of receiving spells as prayer boon.
Anyone now has a 25% chance of having the spell directly implanted
into their head, not just characters who have maintained illiterate
conduct.  It can now also restore a forgotten spell or refresh one
that is nearly forgotten.  It still tries to choose a spell which
isn't already known (new: or was known but has been forgotten) but if
it picks one that is known and doesn't need refreshing, a redundant
book will be given, same as the behavior in earlier versions.

The chance for receiving a blank spellbook is higher when that item
is undiscovered.  When given as a prayer reward, make it become
discovered even if hero doesn't read it so that it will be less likely
to be given again.  There's a 1% chance for that auto-discovery to
happen with other bestowed books.  Unlike blank boots, having the book
be discovered doesn't lessen their chance of being repeat gifts.

Minor bug fix:  for a spell implanted from scratch, the book remains
unknown.  That's ok; it's actually more interesting than discovering
a book you haven't seen yet.  But after acquiring and reading the book
you could get "you know <spell> quite well already" and the book would
stay undiscovered even though you were just told what spell it's for.
2022-03-09 07:06:37 -08:00

39 lines
1.2 KiB
C

/* NetHack 3.7 spell.h $NHDT-Date: 1646838388 2022/03/09 15:06:28 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.14 $ */
/* Copyright 1986, M. Stephenson */
/* NetHack may be freely redistributed. See license for details. */
#ifndef SPELL_H
#define SPELL_H
#define NO_SPELL 0
#define UNKNOWN_SPELL (-1)
/* spellbook re-use control; used when reading and when polymorphing */
#define MAX_SPELL_STUDY 3
struct spell {
short sp_id; /* spell id (== object.otyp) */
xchar sp_lev; /* power level */
int sp_know; /* knowlege of spell */
};
enum spellknowledge {
spe_Forgotten = -1, /* known but no longer castable */
spe_Unknown = 0, /* not yet known */
spe_Fresh = 1, /* castable if various casting criteria are met */
spe_GoingStale = 2 /* still castable but nearly forgotten */
};
/* levels of memory destruction with a scroll of amnesia */
#define ALL_MAP 0x1
#define ALL_SPELLS 0x2
#define decrnknow(spell) g.spl_book[spell].sp_know--
#define spellid(spell) g.spl_book[spell].sp_id
#define spellknow(spell) g.spl_book[spell].sp_know
/* how much Pw a spell of level lvl costs to cast? */
#define SPELL_LEV_PW(lvl) ((lvl) * 5)
#endif /* SPELL_H */