diff --git a/doc/fixes33.2 b/doc/fixes33.2 index 9bea526d9..d6bf5da2a 100644 --- a/doc/fixes33.2 +++ b/doc/fixes33.2 @@ -493,6 +493,8 @@ add wizard #poly and #levelchange (originally levelgain; Dylan O'Donnell), add Jason Short's additional lenses use patch add new Gnomish Mines levels from Kelly Bailey's patch jousting by players wielding a lance while riding +when reading spellbooks, don't "continue studying" wrong book if original one + gets destroyed after previous reading attempt has been interrupted Platform- and/or Interface-Specific New Features diff --git a/include/extern.h b/include/extern.h index 6a9ce1b30..f786e60db 100644 --- a/include/extern.h +++ b/include/extern.h @@ -1808,6 +1808,7 @@ E boolean FDECL(load_special, (const char *)); E int NDECL(learn); #endif E int FDECL(study_book, (struct obj *)); +E void FDECL(book_disappears, (struct obj *)); E void FDECL(book_substitution, (struct obj *,struct obj *)); E void NDECL(age_spells); E int NDECL(docast); diff --git a/src/save.c b/src/save.c index 1e6720add..f70fbfbdf 100644 --- a/src/save.c +++ b/src/save.c @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)save.c 3.3 2000/07/27 */ +/* SCCS Id: @(#)save.c 3.3 2002/01/19 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -840,7 +840,8 @@ register struct obj *otmp; if (Has_contents(otmp)) saveobjchn(fd,otmp->cobj,mode); if (release_data(mode)) { - if(otmp->oclass == FOOD_CLASS) food_disappears(otmp); + if (otmp->oclass == FOOD_CLASS) food_disappears(otmp); + if (otmp->oclass == SPBOOK_CLASS) book_disappears(otmp); otmp->where = OBJ_FREE; /* set to free so dealloc will work */ otmp->timed = 0; /* not timed any more */ otmp->lamplit = 0; /* caller handled lights */ diff --git a/src/shk.c b/src/shk.c index ff64a11fb..3451e1942 100644 --- a/src/shk.c +++ b/src/shk.c @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)shk.c 3.3 2001/12/06 */ +/* SCCS Id: @(#)shk.c 3.3 2002/01/19 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -770,9 +770,9 @@ register struct obj *obj, *merge; register struct bill_x *bpm; register struct monst *shkp; - if (obj->otyp == LEASH && obj->leashmon) o_unleash(obj); if (obj->oclass == FOOD_CLASS) food_disappears(obj); + if (obj->oclass == SPBOOK_CLASS) book_disappears(obj); if (Has_contents(obj)) delete_contents(obj); shkp = 0; diff --git a/src/spell.c b/src/spell.c index eecd15b48..0d3fec3b8 100644 --- a/src/spell.c +++ b/src/spell.c @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)spell.c 3.3 2001/12/03 */ +/* SCCS Id: @(#)spell.c 3.3 2002/01/19 */ /* Copyright (c) M. Stephenson 1988 */ /* NetHack may be freely redistributed. See license for details. */ @@ -453,6 +453,15 @@ register struct obj *spellbook; return(1); } +/* a spellbook has been destroyed or the character has changed levels; + the stored address for the current book is no longer valid */ +void +book_disappears(obj) +struct obj *obj; +{ + if (obj == book) book = (struct obj *)0; +} + /* renaming an object usually results in it having a different address; so the sequence start reading, get interrupted, name the book, resume reading would read the "new" book from scratch */ @@ -1176,5 +1185,4 @@ struct obj *obj; return; } - /*spell.c*/