... instead of receiving a spellbook.
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
extern void initialspell(struct obj *);
extern boolean known_spell(short);
extern int spell_idx(short);
+extern boolean force_learn_spell(short);
/* ### steal.c ### */
}
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:
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*/