blanking novels
Simplify converting novels into blank spellbooks via water damage. Since that can occur, update cancellation to do it too.
This commit is contained in:
@@ -3799,6 +3799,7 @@ extern struct monst *revive(struct obj *, boolean) NONNULLARG1;
|
|||||||
extern int unturn_dead(struct monst *) NONNULLARG1;
|
extern int unturn_dead(struct monst *) NONNULLARG1;
|
||||||
extern void unturn_you(void);
|
extern void unturn_you(void);
|
||||||
extern void cancel_item(struct obj *) NONNULLARG1;
|
extern void cancel_item(struct obj *) NONNULLARG1;
|
||||||
|
extern void blank_novel(struct obj *) NONNULLARG1;
|
||||||
extern boolean drain_item(struct obj *, boolean) NO_NNARGS; /* tests !obj */
|
extern boolean drain_item(struct obj *, boolean) NO_NNARGS; /* tests !obj */
|
||||||
extern boolean obj_unpolyable(struct obj *) NONNULLARG1;
|
extern boolean obj_unpolyable(struct obj *) NONNULLARG1;
|
||||||
extern struct obj *poly_obj(struct obj *, int) NONNULLARG1;
|
extern struct obj *poly_obj(struct obj *, int) NONNULLARG1;
|
||||||
|
|||||||
12
src/trap.c
12
src/trap.c
@@ -4613,16 +4613,8 @@ water_damage(
|
|||||||
obj->spestudied = rn2(obj->spestudied);
|
obj->spestudied = rn2(obj->spestudied);
|
||||||
obj->dknown = 0;
|
obj->dknown = 0;
|
||||||
/* blanking a novel is more involved than blanking a spellbook */
|
/* blanking a novel is more involved than blanking a spellbook */
|
||||||
if (otyp == SPE_NOVEL) { /* old type */
|
if (otyp == SPE_NOVEL) /* old type */
|
||||||
obj->novelidx = 0; /* overloads corpsenm, not used for splbooks */
|
blank_novel(obj);
|
||||||
free_oname(obj);
|
|
||||||
/* novels weigh less than spellbooks; apparently blanking them
|
|
||||||
magically makes them become heavier */
|
|
||||||
do {
|
|
||||||
obj->owt = weight(obj);
|
|
||||||
obj = (obj->where == OBJ_CONTAINED) ? obj->ocontainer : 0;
|
|
||||||
} while (obj);
|
|
||||||
}
|
|
||||||
if (in_invent)
|
if (in_invent)
|
||||||
update_inventory();
|
update_inventory();
|
||||||
return ER_DAMAGED;
|
return ER_DAMAGED;
|
||||||
|
|||||||
26
src/zap.c
26
src/zap.c
@@ -1255,9 +1255,11 @@ cancel_item(struct obj *obj)
|
|||||||
|| obj->oclass == WEAPON_CLASS || is_weptool(obj)))
|
|| obj->oclass == WEAPON_CLASS || is_weptool(obj)))
|
||||||
|| otyp == POT_ACID
|
|| otyp == POT_ACID
|
||||||
|| otyp == POT_SICKNESS
|
|| otyp == POT_SICKNESS
|
||||||
|| (otyp == POT_WATER && (obj->blessed || obj->cursed))) {
|
|| (otyp == POT_WATER && (obj->blessed || obj->cursed))
|
||||||
|
/* not magic; cancels to blank spellbook */
|
||||||
|
|| otyp == SPE_NOVEL) {
|
||||||
int cancelled_spe = (obj->oclass == WAND_CLASS
|
int cancelled_spe = (obj->oclass == WAND_CLASS
|
||||||
|| obj->otyp == CRYSTAL_BALL) ? -1 : 0;
|
|| otyp == CRYSTAL_BALL) ? -1 : 0;
|
||||||
|
|
||||||
if (obj->spe != cancelled_spe
|
if (obj->spe != cancelled_spe
|
||||||
&& otyp != WAN_CANCELLATION /* can't cancel cancellation */
|
&& otyp != WAN_CANCELLATION /* can't cancel cancellation */
|
||||||
@@ -1273,10 +1275,12 @@ cancel_item(struct obj *obj)
|
|||||||
obj->spe = 0;
|
obj->spe = 0;
|
||||||
break;
|
break;
|
||||||
case SPBOOK_CLASS:
|
case SPBOOK_CLASS:
|
||||||
if (otyp != SPE_CANCELLATION && otyp != SPE_NOVEL
|
if (otyp != SPE_CANCELLATION && otyp != SPE_BOOK_OF_THE_DEAD) {
|
||||||
&& otyp != SPE_BOOK_OF_THE_DEAD) {
|
|
||||||
costly_alteration(obj, COST_CANCEL);
|
costly_alteration(obj, COST_CANCEL);
|
||||||
obj->otyp = SPE_BLANK_PAPER;
|
obj->otyp = SPE_BLANK_PAPER;
|
||||||
|
/* cancelling a novel is more involved than a spellbook */
|
||||||
|
if (otyp == SPE_NOVEL) /* old type */
|
||||||
|
blank_novel(obj);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case POTION_CLASS:
|
case POTION_CLASS:
|
||||||
@@ -1313,6 +1317,20 @@ cancel_item(struct obj *obj)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* soaking or cancelling a novel converts it into a blank spellbook but
|
||||||
|
needs more than just changing its otyp (caller is responsible for that) */
|
||||||
|
void
|
||||||
|
blank_novel(struct obj *obj)
|
||||||
|
{
|
||||||
|
assert(obj->otyp == SPE_BLANK_PAPER);
|
||||||
|
/* novelidx overloads corpsenm, not used for spellbooks */
|
||||||
|
obj->novelidx = 0;
|
||||||
|
free_oname(obj); /* get rid of [former] novel's title */
|
||||||
|
/* a blank spellbook weighs more than a novel; update obj's weight and
|
||||||
|
recursively the weight of any container holding it */
|
||||||
|
container_weight(obj);
|
||||||
|
}
|
||||||
|
|
||||||
/* Remove a positive enchantment or charge from obj,
|
/* Remove a positive enchantment or charge from obj,
|
||||||
* possibly carried by you or a monster
|
* possibly carried by you or a monster
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user