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.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.7 extern.h $NHDT-Date: 1646255373 2022/03/02 21:09:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1064 $ */
|
||||
/* NetHack 3.7 extern.h $NHDT-Date: 1646838387 2022/03/09 15:06:27 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1068 $ */
|
||||
/* Copyright (c) Steve Creps, 1988. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -2543,9 +2543,9 @@ extern int tport_spell(int);
|
||||
extern void losespells(void);
|
||||
extern int dovspell(void);
|
||||
extern void initialspell(struct obj *);
|
||||
extern boolean known_spell(short);
|
||||
extern int known_spell(short);
|
||||
extern int spell_idx(short);
|
||||
extern boolean force_learn_spell(short);
|
||||
extern char force_learn_spell(short);
|
||||
extern int num_spells(void);
|
||||
|
||||
/* ### steal.c ### */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.7 spell.h $NHDT-Date: 1596498560 2020/08/03 23:49:20 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.11 $ */
|
||||
/* 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. */
|
||||
|
||||
@@ -17,6 +17,13 @@ struct spell {
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user