Illiterate hero will learn spells directly from deity

... instead of receiving a spellbook.
This commit is contained in:
Pasi Kallinen
2022-02-20 22:05:30 +02:00
parent fcdae54173
commit 4a61602436
4 changed files with 37 additions and 4 deletions

View File

@@ -798,6 +798,8 @@ engraving with Fire Brand burns the text on the floor and does not
make looting less tedious by getting rid of a y/n prompt making the command
go directly into the loot-in-out -menu
always give a message when monster changes form via polytrap if seen
illiterate hero receiving a spellbook from their deity gets the spell shoved
directly into their mind instead
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository

View File

@@ -2538,6 +2538,7 @@ extern int dovspell(void);
extern void initialspell(struct obj *);
extern boolean known_spell(short);
extern int spell_idx(short);
extern boolean force_learn_spell(short);
/* ### steal.c ### */

View File

@@ -1201,10 +1201,17 @@ pleased(aligntyp g_align)
}
otmp->otyp = rnd_class(g.bases[SPBOOK_CLASS], SPE_BLANK_PAPER);
}
bless(otmp);
at_your_feet("A spellbook");
place_object(otmp, u.ux, u.uy);
newsym(u.ux, u.uy);
if (!u.uconduct.literate && !known_spell(otmp->otyp)) {
if (force_learn_spell(otmp->otyp))
pline("Divine knowledge of %s fills your mind!",
OBJ_NAME(objects[otmp->otyp]));
obfree(otmp, (struct obj *) 0);
} else {
bless(otmp);
at_your_feet("A spellbook");
place_object(otmp, u.ux, u.uy);
newsym(u.ux, u.uy);
}
break;
}
default:

View File

@@ -1947,4 +1947,27 @@ spell_idx(short otyp)
return -1;
}
/* forcibly learn spell otyp, if possible */
boolean
force_learn_spell(short otyp)
{
int i;
if (known_spell(otyp))
return FALSE;
for (i = 0; i < MAXSPELL; i++)
if (spellid(i) == NO_SPELL)
break;
if (i == MAXSPELL)
impossible("Too many spells memorized");
else {
g.spl_book[i].sp_id = otyp;
g.spl_book[i].sp_lev = objects[otyp].oc_level;
incrnknow(i, 1);
return TRUE;
}
return FALSE;
}
/*spell.c*/