/** * Clear the dungeon, ready for generation to begin. */ static void cave_clear(struct chunk *c, struct player *p) { int x, y; /* Clear the monsters */ wipe_mon_list(c, p); /* Deal with artifacts */ for (y = 0; y < c->height; y++) { for (x = 0; x < c->width; x++) { struct object *obj = square_object(c, y, x); while (obj) { if (obj->artifact) { if (!OPT(birth_no_preserve) && !object_was_sensed(obj)) obj->artifact->created = FALSE; else history_lose_artifact(obj->artifact); } obj = obj->next; } } } /* Free the chunk */ cave_free(c); }
/** * Close up the current game (player may or may not be dead) * * Note that the savefile is not saved until the tombstone is * actually displayed and the player has a chance to examine * the inventory and such. This allows cheating if the game * is equipped with a "quit without save" method. XXX XXX XXX */ void close_game(void) { /* Tell the UI we're done with the world */ event_signal(EVENT_LEAVE_WORLD); /* Handle stuff */ handle_stuff(player); /* Flush the messages */ event_signal(EVENT_MESSAGE_FLUSH); /* Flush the input */ event_signal(EVENT_INPUT_FLUSH); /* No suspending now */ signals_ignore_tstp(); /* Hack -- Increase "icky" depth */ screen_save_depth++; /* Save monster memory to user directory */ if (!lore_save("lore.txt")) { msg("lore save failed!"); event_signal(EVENT_MESSAGE_FLUSH); } /* Handle death or life */ if (player->is_dead) { death_knowledge(); death_screen(); /* Save dead player */ if (!savefile_save(savefile)) { msg("death save failed!"); event_signal(EVENT_MESSAGE_FLUSH); } } else { /* Save the game */ save_game(); if (Term->mapped_flag) { struct keypress ch; prt("Press Return (or Escape).", 0, 40); ch = inkey(); if (ch.code != ESCAPE) predict_score(); } } /* Wipe the monster list */ wipe_mon_list(cave, player); /* Hack -- Decrease "icky" depth */ screen_save_depth--; /* Tell the UI we're done with the game state */ event_signal(EVENT_LEAVE_GAME); /* Allow suspending now */ signals_handle_tstp(); }