diff --git a/include/extern.h b/include/extern.h index d3754352e..8d6fda3d2 100644 --- a/include/extern.h +++ b/include/extern.h @@ -243,7 +243,7 @@ E int FDECL(object_detect, (struct obj *, int)); E int FDECL(monster_detect, (struct obj *, int)); E int FDECL(trap_detect, (struct obj *)); E const char *FDECL(level_distance, (d_level *)); -E void FDECL(use_crystal_ball, (struct obj *)); +E void FDECL(use_crystal_ball, (struct obj **)); E void NDECL(do_mapping); E void NDECL(do_vicinity_map); E void FDECL(cvt_sdoor_to_door, (struct rm *)); diff --git a/src/apply.c b/src/apply.c index f1e46b656..31800d8f8 100644 --- a/src/apply.c +++ b/src/apply.c @@ -3486,7 +3486,7 @@ doapply() res = use_towel(obj); break; case CRYSTAL_BALL: - use_crystal_ball(obj); + use_crystal_ball(&obj); break; case MAGIC_MARKER: res = dowrite(obj); diff --git a/src/artifact.c b/src/artifact.c index 4e6c22015..789057932 100644 --- a/src/artifact.c +++ b/src/artifact.c @@ -1401,13 +1401,13 @@ doinvoke() STATIC_OVL int arti_invoke(obj) -register struct obj *obj; +struct obj *obj; { register const struct artifact *oart = get_artifact(obj); if (!oart || !oart->inv_prop) { if (obj->otyp == CRYSTAL_BALL) - use_crystal_ball(obj); + use_crystal_ball(&obj); else pline1(nothing_happens); return 1; diff --git a/src/detect.c b/src/detect.c index 41ee1f4d3..c8f824eed 100644 --- a/src/detect.c +++ b/src/detect.c @@ -891,11 +891,12 @@ static const struct { }; void -use_crystal_ball(obj) -struct obj *obj; +use_crystal_ball(optr) +struct obj **optr; { char ch; int oops; + struct obj *obj = *optr; if (Blind) { pline("Too bad you can't see %s.", the(xname(obj))); @@ -930,7 +931,7 @@ struct obj *obj; case 5: pline("%s!", Tobjnam(obj, "explode")); useup(obj); - obj = 0; /* it's gone */ + *optr = obj = 0; /* it's gone */ /* physical damage cause by the shards and force */ losehp(Maybe_Half_Phys(rnd(30)), "exploding crystal ball", KILLED_BY_AN);