From: PatR Date: Wed, 22 May 2019 00:40:57 +0000 (-0700) Subject: ball and chain sanity check revisited X-Git-Tag: NetHack-3.7.0_WIP~406^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1e2e3bf492c5bbce9a2610761d94a9f10824d756;p=nethack ball and chain sanity check revisited Move some duplicated debugging code into its own routine. --- diff --git a/include/extern.h b/include/extern.h index 890bb5f79..dd32c6091 100644 --- a/include/extern.h +++ b/include/extern.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 extern.h $NHDT-Date: 1557088399 2019/05/05 20:33:19 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.703 $ */ +/* NetHack 3.6 extern.h $NHDT-Date: 1558485640 2019/05/22 00:40:40 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.706 $ */ /* Copyright (c) Steve Creps, 1988. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1671,6 +1671,7 @@ E void NDECL(objects_init); E char *FDECL(obj_typename, (int)); E char *FDECL(simple_typename, (int)); +E char *FDECL(safe_typename, (int)); E boolean FDECL(obj_is_pname, (struct obj *)); E char *FDECL(distant_name, (struct obj *, char *(*)(OBJ_P))); E char *FDECL(fruitname, (BOOLEAN_P)); diff --git a/src/ball.c b/src/ball.c index d0570bbaa..3e04cb8df 100644 --- a/src/ball.c +++ b/src/ball.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 ball.c $NHDT-Date: 1557088406 2019/05/05 20:33:26 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.36 $ */ +/* NetHack 3.6 ball.c $NHDT-Date: 1558485648 2019/05/22 00:40:48 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.37 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) David Cohrs, 2006. */ /* NetHack may be freely redistributed. See license for details. */ @@ -850,7 +850,6 @@ void bc_sanity_check() { int otyp; - unsigned save_nameknown; const char *onam; if (Punished && (!uball || !uchain)) { @@ -872,15 +871,7 @@ bc_sanity_check() || (uball->owornmask & W_BALL) == 0L || (uball->owornmask & ~(W_BALL | W_WEAPON)) != 0L)) { otyp = uball->otyp; - if (otyp < STRANGE_OBJECT || otyp >= NUM_OBJECTS - || !OBJ_NAME(objects[otyp])) { - onam = "glorkum"; - } else { - save_nameknown = objects[otyp].oc_name_known; - objects[otyp].oc_name_known = 1; - onam = simple_typename(otyp); - objects[otyp].oc_name_known = save_nameknown; - } + onam = safe_typename(otyp); impossible("uball: type %d (%s), where %d, wornmask=0x%08lx", otyp, onam, uball->where, uball->owornmask); } @@ -892,15 +883,7 @@ bc_sanity_check() || (uchain->owornmask & W_CHAIN) == 0L || (uchain->owornmask & ~W_CHAIN) != 0L)) { otyp = uchain->otyp; - if (otyp < STRANGE_OBJECT || otyp >= NUM_OBJECTS - || !OBJ_NAME(objects[otyp])) { - onam = "glorkum"; - } else { - save_nameknown = objects[otyp].oc_name_known; - objects[otyp].oc_name_known = 1; - onam = simple_typename(otyp); - objects[otyp].oc_name_known = save_nameknown; - } + onam = safe_typename(otyp); impossible("uchain: type %d (%s), where %d, wornmask=0x%08lx", otyp, onam, uchain->where, uchain->owornmask); } diff --git a/src/objnam.c b/src/objnam.c index e8bb71c14..90ac6c44c 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 objnam.c $NHDT-Date: 1558125504 2019/05/17 20:38:24 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.239 $ */ +/* NetHack 3.6 objnam.c $NHDT-Date: 1558485650 2019/05/22 00:40:50 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.241 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2011. */ /* NetHack may be freely redistributed. See license for details. */ @@ -199,6 +199,28 @@ int otyp; return bufp; } +/* typename for debugging feedback where data involved might be suspect */ +char * +safe_typename(otyp) +int otyp; +{ + unsigned save_nameknown; + char *res = 0; + + if (otyp < STRANGE_OBJECT || otyp >= NUM_OBJECTS + || !OBJ_NAME(objects[otyp])) { + res = nextobuf(); + Sprintf(res, "glorkum[%d]", otyp); + } else { + /* force it to be treated as fully discovered */ + save_nameknown = objects[otyp].oc_name_known; + objects[otyp].oc_name_known = 1; + res = simple_typename(otyp); + objects[otyp].oc_name_known = save_nameknown; + } + return res; +} + boolean obj_is_pname(obj) struct obj *obj;