// Begin a new turn public bool ProcessTurn(CommandOutcome turnType) { bool hintOrDeathQuestion = false; bool forced = true; // This loop is repeated while the player is alive until the player reaches a location where movement isn't forced while (playerController.IsAlive && forced) { forced = false; // Ensure we break out of the loop, unless the current location is forced if (turnType == CommandOutcome.FULL) { // If the player has left the cave during closing ... if (playerController.IsOutside && CurrentCaveStatus == CaveStatus.CLOSING) { // ... force them back inside and give them warning about cave closing playerController.RevokeMovement(); textDisplayController.AddTextToLog(playerMessageController.GetMessage("130ClosedAnnounce")); // Start the panic clock, if it hasn't already started StartPanic(); } // CHeck if player's path is blocked by a dwarf before moving player to new location if (dwarfController.Blocked()) { // Passage was blocked, so tell player textDisplayController.AddTextToLog(playerMessageController.GetMessage("2DwarfBlock")); playerController.RevokeMovement(); } else { playerController.CommitMovement(); } // Now process the dwarves if (dwarfController.DoDwarfActions()) { // The dwarves killed the player avatar playerController.KillPlayer(); } } // If player is still alive after any dwarf encounters... if (playerController.IsAlive) { // If the location is to be shown or reshown, show it now if (turnType != CommandOutcome.MESSAGE) { // Now show the current location DisplayLocation(); } // Show useful info in the debug panel (only visible if debug mode is on) debugPanelScript.UpdateDebugPanel(); // Check to see if movement from this location is forced and move if so forced = playerController.CheckForcedMove(); // Forced locations can't have items left there and don't have hints, so if movement was forced, we can skip this section if (!forced) { // Don't show item descriptions again if the command outcome was just a message if (turnType != CommandOutcome.MESSAGE) { // If at Y2 before closing, there's a 25% chance the player hears someone say "PLUGH" if (playerController.CurrentLocation == "33Y2" && CurrentCaveStatus != CaveStatus.CLOSING && Random.value < .25) { textDisplayController.AddTextToLog(playerMessageController.GetMessage("7Plugh")); } DisplayItems(); } // If cave is closed, adjust state of any carried items so they will be described again after they are put down if (CurrentCaveStatus == CaveStatus.CLOSED) { AdjustCarriedItemsAfterClosing(); } // Get rid of the knife if it exists itemController.CleanUpKnife(); } else { // Ensure we process a full turn for any forced movement turnType = CommandOutcome.FULL; } } } // If the player has died if (!playerController.IsAlive) { PlayerDeath(); hintOrDeathQuestion = true; } else { // Show any hints for the current location hintOrDeathQuestion = hintController.CheckForHints(playerController.CurrentLocation); } // Check to see if a continuation save is due persistenceController.CheckContinuationSave(); return(hintOrDeathQuestion); }