diff --git a/src/pickup.c b/src/pickup.c index aeb6f2860..8cec927df 100644 --- a/src/pickup.c +++ b/src/pickup.c @@ -1897,27 +1897,17 @@ struct obj * pick_obj(struct obj *otmp) { struct obj *result; - int ox, oy; - boolean robshop = FALSE; + coordxy ox, oy; + boolean robshop, fromfloor = otmp->where == OBJ_FLOOR; - if (otmp->ox == 0 && otmp->oy == 0) { - if (u.uswallow && u.ustuck && otmp->where == OBJ_MINVENT - && otmp->ocarry == u.ustuck) { - otmp->ox = u.ustuck->mx; - otmp->oy = u.ustuck->my; - } else { - /* this will be a problem for newsym below */ - impossible("otmp has no location coordinates <%d, %d> where=%d.", - otmp->ox, otmp->oy, otmp->where); - } - } + /* otmp is either on the floor or in an engulfer's inventory; for the + latter, its probably won't be set */ + (void) get_obj_location(otmp, &ox, &oy, 0); - ox = otmp->ox; - oy = otmp->oy; robshop = (!u.uswallow && otmp != uball && costly_spot(ox, oy)); - obj_extract_self(otmp); - newsym(ox, oy); + if (fromfloor) + newsym(ox, oy); /* for shop items, addinv() needs to be after addtobill() (so that object merger can take otmp->unpaid into account) but before diff --git a/sys/windows/consoletty.c b/sys/windows/consoletty.c index 5f2a4bbfd..5b5b77070 100644 --- a/sys/windows/consoletty.c +++ b/sys/windows/consoletty.c @@ -3120,17 +3120,17 @@ default_checkinput( if (dwWait == WAIT_FAILED) return '\033'; #endif -#ifdef INSURANCE if (iflags.idlecheckpoint && dwWait == WAIT_TIMEOUT && !done_a_checkpoint) { /* no input for 30 seconds, so let's take * advantage and do a game checkpoint, * then resume the wait. */ +#ifdef INSURANCE save_currentstate(); +#endif /* INSURANCE */ done_a_checkpoint = TRUE; } else -#endif /* INSURANCE */ { ReadConsoleInput(hConIn, ir, 1, count); if (mode == 0) {