Start with a level 1 spell and enough power
Ensure the first spell - if any - given to the hero in initial inventory is level 1 - otherwise you can end up with a situation where the hero knows level 3 spells, but won't have enough power to cast them. If the hero starts out with a spell, ensure enough power (5) to cast that level 1 spell.
This commit is contained in:
@@ -807,6 +807,8 @@ flint and hard gems break less often when thrown
|
||||
hobbits getting a sling also get some ammo for it
|
||||
elves and rangers get alignment penalty for cutting down trees
|
||||
casting a forgotten spell uses some random amount of power
|
||||
heroes starting with a spell have at least one level one spell, and
|
||||
have just enough power to cast it
|
||||
|
||||
|
||||
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
|
||||
|
||||
@@ -2539,6 +2539,7 @@ extern void initialspell(struct obj *);
|
||||
extern boolean known_spell(short);
|
||||
extern int spell_idx(short);
|
||||
extern boolean force_learn_spell(short);
|
||||
extern int num_spells(void);
|
||||
|
||||
/* ### steal.c ### */
|
||||
|
||||
|
||||
12
src/spell.c
12
src/spell.c
@@ -1975,4 +1975,16 @@ force_learn_spell(short otyp)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* number of spells hero knows */
|
||||
int
|
||||
num_spells(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAXSPELL; i++)
|
||||
if (spellid(i) == NO_SPELL)
|
||||
break;
|
||||
return i;
|
||||
}
|
||||
|
||||
/*spell.c*/
|
||||
|
||||
11
src/u_init.c
11
src/u_init.c
@@ -932,6 +932,11 @@ u_init(void)
|
||||
break;
|
||||
}
|
||||
|
||||
/* If we have at least one spell, force starting Pw to be 5,
|
||||
so hero can cast the level 1 spell they should have */
|
||||
if (num_spells() && (u.uenmax < 5))
|
||||
u.uen = u.uenmax = u.uenpeak = u.ueninc[u.ulevel] = 5;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1000,6 +1005,7 @@ ini_inv(struct trobj *trop)
|
||||
{
|
||||
struct obj *obj;
|
||||
int otyp, i;
|
||||
boolean got_sp1 = FALSE; /* got a level 1 spellbook? */
|
||||
|
||||
while (trop->trclass) {
|
||||
otyp = (int) trop->trotyp;
|
||||
@@ -1042,7 +1048,7 @@ ini_inv(struct trobj *trop)
|
||||
low level players or unbalancing; also
|
||||
spells in restricted skill categories */
|
||||
|| (obj->oclass == SPBOOK_CLASS
|
||||
&& (objects[otyp].oc_level > 3
|
||||
&& (objects[otyp].oc_level > (got_sp1 ? 3 : 1)
|
||||
|| restricted_spell_discipline(otyp)))
|
||||
|| otyp == SPE_NOVEL) {
|
||||
dealloc_obj(obj);
|
||||
@@ -1076,6 +1082,9 @@ ini_inv(struct trobj *trop)
|
||||
/* Don't have 2 of the same ring or spellbook */
|
||||
if (obj->oclass == RING_CLASS || obj->oclass == SPBOOK_CLASS)
|
||||
g.nocreate4 = otyp;
|
||||
/* First spellbook should be level 1 - did we get it? */
|
||||
if (obj->oclass == SPBOOK_CLASS && objects[obj->otyp].oc_level == 1)
|
||||
got_sp1 = TRUE;
|
||||
}
|
||||
|
||||
if (g.urace.mnum != PM_HUMAN) {
|
||||
|
||||
Reference in New Issue
Block a user