コード例 #1
0
        private void awaitRescue()
        {
            //check for an AOK file from file rescue
            string aokPath = DataManager.FindRescueMail(PathMod.NoMod(DataManager.RESCUE_IN_PATH + DataManager.AOK_FOLDER), DataManager.Instance.Save.Rescue.SOS, DataManager.AOK_EXTENSION);

            if (aokPath != null)
            {
                AOKMail aok = (AOKMail)DataManager.LoadRescueMail(aokPath);
                SetAOK(aok);
                //an AOK mail has been found!
                MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(() => loadAOK(aokPath, aok), Text.FormatKey("DLG_AWAIT_RESCUE_AOK_FOUND")), true);
            }
            else
            {
                //if there's no AOK, generate the SOS mail from the save data
                if (!File.Exists(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.SOS_FOLDER + DataManager.Instance.Save.UUID + DataManager.SOS_EXTENSION)))
                {
                    DataManager.SaveRescueMail(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.SOS_FOLDER), DataManager.Instance.Save.Rescue.SOS, true);
                }


                List <DialogueChoice> choices = new List <DialogueChoice>();
                choices.Add(new DialogueChoice(Text.FormatKey("MENU_RESCUE_GET_HELP"), contactForHelp));
                choices.Add(new DialogueChoice(Text.FormatKey("MENU_RESCUE_CONFIGURE_SERVER"), configureServer));
                choices.Add(new DialogueChoice(Text.FormatKey("MENU_RESCUE_OFFER_REWARD"), offerReward));
                choices.Add(new DialogueChoice(Text.FormatKey("MENU_REST_QUIT"), giveUp));
                choices.Add(new DialogueChoice(Text.FormatKey("MENU_CANCEL"), () => { MenuManager.Instance.RemoveMenu(); }));
                MenuManager.Instance.AddMenu(MenuManager.Instance.CreateMultiQuestion(Text.FormatKey("DLG_AWAIT_RESCUE_ASK"), false,
                                                                                      choices, 0, choices.Count - 1), true);
            }
        }
コード例 #2
0
        public bool HasAOKMail()
        {
            string parentPath = PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.AOK_FOLDER);

            string[] files = System.IO.Directory.GetFiles(parentPath, "*" + DataManager.AOK_EXTENSION);
            return(files.Length > 0);
        }
コード例 #3
0
        private void completeAOK()
        {
            //if the mail worked, mark the save file as complete
            //and then return to the top menu

            //notify if it is found and working
            //notify if it failed to work
            //delete the mail either way
            GameState state = DataManager.Instance.LoadMainGameState();

            state.Save.Rescue.SOS.RescuedBy             = testingMail.RescuingTeam;
            state.Save.Rescue.SOS.RescuingNames         = testingMail.RescuingNames;
            state.Save.Rescue.SOS.RescuingTeam          = testingMail.RescuingProfile;
            state.Save.Rescue.SOS.RescuingPersonalities = testingMail.RescuingPersonalities;
            state.Save.Rescue.SOS.FinalStatement        = testingMail.FinalStatement;
            DataManager.Instance.SaveGameState(state);

            //delete the SOS and AOK files if applicable
            if (File.Exists(testingPath))
            {
                File.Delete(testingPath);
            }

            if (File.Exists(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.SOS_FOLDER + state.Save.UUID + DataManager.SOS_EXTENSION)))
            {
                File.Delete(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.SOS_FOLDER + state.Save.UUID + DataManager.SOS_EXTENSION));
            }


            MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(MenuManager.Instance.ClearMenus, Text.FormatKey("DLG_AWAIT_RESCUE_RESUME")), true);
        }
コード例 #4
0
        public override IEnumerator <YieldInstruction> BeginGame(int zoneID, ulong seed, DungeonStakes stakes, bool recorded, bool noRestrict)
        {
            MidAdventure = true;
            Stakes       = stakes;

            if (recorded)
            {
                DataManager.Instance.BeginPlay(PathMod.NoMod(DataManager.ROGUE_PATH + DataManager.Instance.Save.StartDate + DataManager.QUICKSAVE_EXTENSION), zoneID, true, Seeded);
            }

            yield break;
        }
コード例 #5
0
        public RogueMenu()
        {
            List <MenuTextChoice> choices = new List <MenuTextChoice>();

            choices.Add(new MenuTextChoice(Text.FormatKey("MENU_TOP_NEW"), () => { MenuManager.Instance.AddMenu(new RogueDestMenu(), false); }));
            if (Data.DataManager.Instance.FoundRecords(PathMod.NoMod(Data.DataManager.ROGUE_PATH)))
            {
                choices.Add(new MenuTextChoice(Text.FormatKey("MENU_TOP_LOAD"), () => { MenuManager.Instance.AddMenu(new QuicksaveMenu(), false); }));
            }
            choices.Add(new MenuTextChoice(Text.FormatKey("MENU_INFO"), () => { MenuManager.Instance.AddMenu(new RogueInfoMenu(), false); }));

            Initialize(new Loc(16, 16), CalculateChoiceLength(choices, 72), choices.ToArray(), 0);
        }
コード例 #6
0
        public void AddAOKRemark(int remarkIndex)
        {
            AOKMail aok = null;

            if (DataManager.Instance.Save.GeneratedAOK != null)
            {
                aok = DataManager.LoadRescueMail(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.AOK_FOLDER + DataManager.Instance.Save.GeneratedAOK)) as AOKMail;
            }
            if (aok != null)
            {
                aok.FinalStatement = remarkIndex;
                DataManager.SaveRescueMail(DataManager.Instance.Save.GeneratedAOK, aok);
            }
        }
コード例 #7
0
        private void DeleteAction()
        {
            if (File.Exists(recordDir))
            {
                File.Delete(recordDir);
            }

            MenuManager.Instance.RemoveMenu();

            if (DataManager.Instance.FoundRecords(PathMod.NoMod(DataManager.ROGUE_PATH)))
            {
                MenuManager.Instance.ReplaceMenu(new QuicksaveMenu());
            }
            else
            {
                MenuManager.Instance.RemoveMenu();
                MenuManager.Instance.ReplaceMenu(new TopMenu());
            }
        }
コード例 #8
0
ファイル: MailMenu.cs プロジェクト: RogueCollab/RogueEssence
        private void DeleteAction(string fileName)
        {
            File.Delete(fileName);

            MenuManager.Instance.RemoveMenu();

            string parentPath = sosMode ? PathMod.NoMod(DataManager.RESCUE_IN_PATH + DataManager.SOS_FOLDER) : PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.AOK_FOLDER);

            files = Directory.GetFiles(parentPath, "*" + (sosMode ? DataManager.SOS_EXTENSION : DataManager.AOK_EXTENSION));

            if (files.Length > 0)
            {
                MenuManager.Instance.ReplaceMenu(new MailMenu(sosMode, action));
            }
            else
            {
                MenuManager.Instance.RemoveMenu();
            }
        }
コード例 #9
0
        public QuicksaveMenu()
        {
            List <RecordHeaderData> records = DataManager.Instance.GetRecordHeaders(PathMod.NoMod(DataManager.ROGUE_PATH), DataManager.QUICKSAVE_EXTENSION);

            List <MenuChoice> flatChoices = new List <MenuChoice>();

            foreach (RecordHeaderData record in records)
            {
                string fileName = Path.GetFileNameWithoutExtension(record.Path);
                if (record.Name != "")
                {
                    LocalText zoneName  = DataManager.Instance.DataIndices[DataManager.DataType.Zone].Entries[record.Zone].Name;
                    string    rogueSign = "";
                    if (record.IsRogue)
                    {
                        if (record.IsSeeded)
                        {
                            rogueSign = "\uE10D";
                        }
                        else
                        {
                            rogueSign = "\uE10C";
                        }
                    }
                    //also include an indicator of the floors traversed, if possible
                    flatChoices.Add(new MenuTextChoice(rogueSign + record.Name + ": " + zoneName.ToLocal(), () => { choose(record.Path); }));
                }
                else
                {
                    flatChoices.Add(new MenuTextChoice(fileName, () => { choose(record.Path); }));
                }
            }
            List <MenuChoice[]> choices = SortIntoPages(flatChoices, SLOTS_PER_PAGE);


            Initialize(new Loc(0, 0), 240, Text.FormatKey("MENU_SAVE_TITLE"), choices.ToArray(), 0, 0, SLOTS_PER_PAGE);
        }
コード例 #10
0
ファイル: MailMenu.cs プロジェクト: RogueCollab/RogueEssence
        public MailMenu(bool sosMode, OnChoosePath action)
        {
            this.sosMode = sosMode;
            this.action  = action;

            string parentPath = sosMode ? PathMod.NoMod(DataManager.RESCUE_IN_PATH + DataManager.SOS_FOLDER) : PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.AOK_FOLDER);

            files = Directory.GetFiles(parentPath, "*" + (sosMode ? DataManager.SOS_EXTENSION : DataManager.AOK_EXTENSION));
            List <MenuChoice> flatChoices = new List <MenuChoice>();

            for (int ii = 0; ii < files.Length; ii++)
            {
                string filename = files[ii];
                flatChoices.Add(new MenuTextChoice(files[ii].Substring(files[ii].LastIndexOf('/') + 1), () => { choose(filename); }));
            }
            List <MenuChoice[]> choices = SortIntoPages(flatChoices, SLOTS_PER_PAGE);


            summaryMenu = new MailMiniSummary(Rect.FromPoints(new Loc(8,
                                                                      GraphicsManager.ScreenHeight - 8 - GraphicsManager.MenuBG.TileHeight * 2 - VERT_SPACE * 4),
                                                              new Loc(GraphicsManager.ScreenWidth - 8, GraphicsManager.ScreenHeight - 8)));

            Initialize(new Loc(8, 8), 196, Text.FormatKey(sosMode ? "MENU_MAIL_SOS_TITLE" : "MENU_MAIL_AOK_TITLE"), choices.ToArray(), 0, 0, SLOTS_PER_PAGE);
        }
コード例 #11
0
        public override void Update(InputManager input)
        {
            Visible = true;

            NetworkManager.Instance.Update();
            if (NetworkManager.Instance.Status == OnlineStatus.Offline)
            {
                //give offline message in a dialogue
                MenuManager.Instance.RemoveMenu();
                if (CurrentState != ExchangeRescueState.Completed)
                {
                    MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(NetworkManager.Instance.ExitMsg), false);
                }
            }
            else
            {
                if (CurrentState == ExchangeRescueState.Communicating)
                {
                    //first send the SOS
                    SOSMail mail = DataManager.Instance.Save.Rescue.SOS;

                    CurrentState = ExchangeRescueState.SOSReady;

                    ActivityGetHelp getHelp = NetworkManager.Instance.Activity as ActivityGetHelp;
                    getHelp.OfferMail(mail);
                    getHelp.SetReady(CurrentState);
                }
                else if (CurrentState == ExchangeRescueState.SOSReady)
                {
                    //wait for other party's ready to receive SOS or ready to send AOK
                    ActivityGetHelp getHelp = NetworkManager.Instance.Activity as ActivityGetHelp;

                    if (getHelp.CurrentState == ExchangeRescueState.SOSReady)
                    {
                        //ready to receive SOS
                        DialogueBox dialog = MenuManager.Instance.CreateQuestion(Text.FormatKey("DLG_RESCUE_SEND_SOS_ASK", getHelp.TargetInfo.Data.TeamName), () =>
                        {
                            CurrentState = ExchangeRescueState.SOSTrading;
                            getHelp.SetReady(CurrentState);
                        }, () =>
                        {
                            //just disconnect
                            MenuManager.Instance.RemoveMenu();
                            NetworkManager.Instance.Disconnect();
                        });
                        MenuManager.Instance.AddMenu(dialog, true);
                    }
                    else if (getHelp.CurrentState == ExchangeRescueState.AOKReady)
                    {
                        //ready to receive AOK
                        SetAOK(getHelp.OfferedMail);

                        CurrentState = ExchangeRescueState.AOKReady;
                        getHelp.SetReady(CurrentState);

                        string baseAskString = (getHelp.OfferedMail.OfferedItem.Value > -1) ? "DLG_RESCUE_GET_AOK_ASK_REWARD" : "DLG_RESCUE_GET_AOK_ASK";

                        DialogueBox dialog = MenuManager.Instance.CreateQuestion(Text.FormatKey(baseAskString, getHelp.TargetInfo.Data.TeamName), () =>
                        {
                            CurrentState = ExchangeRescueState.AOKTrading;
                            getHelp.SetReady(CurrentState);
                        }, () =>
                        {
                            //just disconnect
                            MenuManager.Instance.RemoveMenu();
                            NetworkManager.Instance.Disconnect();
                        });
                        MenuManager.Instance.AddMenu(dialog, true);
                    }
                    else if (getHelp.CurrentState == ExchangeRescueState.Completed)
                    {
                        //TODO: signal that an SOS has already been sent
                        //MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_SEND_SOS_ALREADY", getHelp.TargetInfo.Data.TeamName)), false);
                        CurrentState = ExchangeRescueState.Completed;
                        getHelp.SetReady(CurrentState);
                    }
                }
                else if (CurrentState == ExchangeRescueState.SOSTrading)
                {
                    //wait for the other party to also be SOSTrading or Completed
                    ActivityGetHelp getHelp = NetworkManager.Instance.Activity as ActivityGetHelp;

                    if (getHelp.CurrentState == ExchangeRescueState.SOSTrading || getHelp.CurrentState == ExchangeRescueState.Completed)
                    {
                        MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_SEND_SOS", getHelp.TargetInfo.Data.TeamName)), false);
                        CurrentState = ExchangeRescueState.Completed;
                        getHelp.SetReady(CurrentState);
                    }
                    //the other possible outcome is that they just disconnect
                }
                else if (CurrentState == ExchangeRescueState.AOKTrading)
                {
                    //wait for the other party to also be AOKTrading or Completed
                    ActivityGetHelp getHelp = NetworkManager.Instance.Activity as ActivityGetHelp;

                    if (getHelp.CurrentState == ExchangeRescueState.AOKTrading || getHelp.CurrentState == ExchangeRescueState.Completed)
                    {
                        //save the AOK file
                        DataManager.SaveRescueMail(PathMod.NoMod(DataManager.RESCUE_IN_PATH + DataManager.AOK_FOLDER), getHelp.OfferedMail, false);
                        if (getHelp.OfferedMail.OfferedItem.Value > -1)
                        {
                            //deduct your reward and save it to the base file
                            GameState state = DataManager.Instance.LoadMainGameState();
                            state.Save.Rescue.SOS.OfferedItem = getHelp.OfferedMail.OfferedItem;
                            DataManager.Instance.SaveGameState(state);

                            MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_GOT_AOK", getHelp.TargetInfo.Data.TeamName), Text.FormatKey("DLG_RESCUE_GOT_AOK_REWARD")), false);
                        }
                        else
                        {
                            MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_GOT_AOK", getHelp.TargetInfo.Data.TeamName)), false);
                        }

                        CurrentState = ExchangeRescueState.Completed;
                        getHelp.SetReady(CurrentState);
                    }
                    //the other possible outcome is that they just disconnect
                }
                else if (CurrentState == ExchangeRescueState.Completed)
                {
                    ActivityGetHelp getHelp = NetworkManager.Instance.Activity as ActivityGetHelp;
                    //wait for the other party to also be Completed to leave the transaction
                    if (getHelp.CurrentState == ExchangeRescueState.Completed)
                    {
                        MenuManager.Instance.RemoveMenu();
                        NetworkManager.Instance.Disconnect();
                    }
                }

                UpdateStatus();
            }
        }
コード例 #12
0
        public override void Update(InputManager input)
        {
            Visible = true;

            NetworkManager.Instance.Update();
            if (NetworkManager.Instance.Status == OnlineStatus.Offline)
            {
                //give offline message in a dialogue
                MenuManager.Instance.RemoveMenu();
                if (CurrentState != ExchangeRescueState.Completed)
                {
                    MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(NetworkManager.Instance.ExitMsg), false);
                }
            }
            else
            {
                if (CurrentState == ExchangeRescueState.Communicating)
                {
                    //wait for an SOS
                    ActivitySendHelp sendHelp = NetworkManager.Instance.Activity as ActivitySendHelp;

                    if (sendHelp.CurrentState == ExchangeRescueState.SOSReady)
                    {
                        SOSMail sos = sendHelp.OfferedMail;

                        aokPath = DataManager.FindRescueMail(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.AOK_FOLDER), sos, DataManager.AOK_EXTENSION);

                        if (aokPath == null)
                        {
                            //no aok found; ask to receive SOS
                            //TODO: check to see if SOS has already been sent
                            //it needs to check if the reward is the same.
                            SetSOS(sendHelp.OfferedMail);

                            CurrentState = ExchangeRescueState.SOSReady;
                            sendHelp.SetReady(CurrentState);

                            DialogueBox dialog = MenuManager.Instance.CreateQuestion(Text.FormatKey("DLG_RESCUE_RECEIVE_SOS_ASK", sendHelp.TargetInfo.Data.TeamName), () =>
                            {
                                CurrentState = ExchangeRescueState.SOSTrading;
                                sendHelp.SetReady(CurrentState);
                            }, () =>
                            {
                                //just disconnect
                                MenuManager.Instance.RemoveMenu();
                                NetworkManager.Instance.Disconnect();
                            });
                            MenuManager.Instance.AddMenu(dialog, true);
                        }
                        else
                        {
                            //aok found; ask to send AOK
                            aok = (AOKMail)DataManager.LoadRescueMail(aokPath);
                            SetAOK(aok);

                            CurrentState = ExchangeRescueState.AOKReady;

                            sendHelp.OfferMail(aok);
                            sendHelp.SetReady(CurrentState);
                        }
                    }
                }
                else if (CurrentState == ExchangeRescueState.SOSTrading)
                {
                    //wait for the other party to also be SOSTrading or Completed
                    ActivitySendHelp sendHelp = NetworkManager.Instance.Activity as ActivitySendHelp;

                    if (sendHelp.CurrentState == ExchangeRescueState.SOSTrading || sendHelp.CurrentState == ExchangeRescueState.Completed)
                    {
                        //save the SOS mail
                        DataManager.SaveRescueMail(PathMod.NoMod(DataManager.RESCUE_IN_PATH + DataManager.SOS_FOLDER), sendHelp.OfferedMail, false);

                        MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_RECEIVE_SOS", sendHelp.TargetInfo.Data.TeamName)), false);
                        CurrentState = ExchangeRescueState.Completed;
                        sendHelp.SetReady(CurrentState);
                    }
                    //the other possible outcome is that they just disconnect
                }
                else if (CurrentState == ExchangeRescueState.AOKReady)
                {
                    //wait for other party's ready to receive SOS or ready to send AOK
                    ActivitySendHelp sendHelp = NetworkManager.Instance.Activity as ActivitySendHelp;

                    if (sendHelp.CurrentState == ExchangeRescueState.AOKReady)
                    {
                        //ready to receive SOS
                        string      baseAskString = (aok.OfferedItem.Value > -1) ? "DLG_RESCUE_SEND_AOK_ASK_REWARD" : "DLG_RESCUE_SEND_AOK_ASK";
                        DialogueBox dialog        = MenuManager.Instance.CreateQuestion(Text.FormatKey(baseAskString, sendHelp.TargetInfo.Data.TeamName), () =>
                        {
                            CurrentState = ExchangeRescueState.AOKTrading;
                            sendHelp.SetReady(CurrentState);
                        }, () =>
                        {
                            //just disconnect
                            MenuManager.Instance.RemoveMenu();
                            NetworkManager.Instance.Disconnect();
                        });
                        MenuManager.Instance.AddMenu(dialog, true);
                    }
                    //the other possible outcome is that they just disconnect
                }
                else if (CurrentState == ExchangeRescueState.AOKTrading)
                {
                    //wait for the other party to also be AOKTrading or Completed
                    ActivitySendHelp sendHelp = NetworkManager.Instance.Activity as ActivitySendHelp;

                    if (sendHelp.CurrentState == ExchangeRescueState.AOKTrading || sendHelp.CurrentState == ExchangeRescueState.Completed)
                    {
                        //delete the AOK file
                        File.Delete(aokPath);

                        if (aok.OfferedItem.Value > -1)
                        {
                            if (aok.OfferedItem.IsMoney)
                            {
                                DataManager.Instance.Save.ActiveTeam.Bank += aok.OfferedItem.Value;
                            }
                            else
                            {
                                List <InvItem> itemsToStore = new List <InvItem>();
                                itemsToStore.Add(aok.OfferedItem.MakeInvItem());
                                DataManager.Instance.Save.ActiveTeam.StoreItems(itemsToStore);
                            }
                            DataManager.Instance.SaveMainGameState();

                            MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_SEND_AOK", sendHelp.TargetInfo.Data.TeamName), Text.FormatKey("DLG_RESCUE_SEND_AOK_REWARD")), false);
                        }
                        else
                        {
                            MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_SEND_AOK", sendHelp.TargetInfo.Data.TeamName)), false);
                        }
                        CurrentState = ExchangeRescueState.Completed;
                        sendHelp.SetReady(CurrentState);
                    }
                    //the other possible outcome is that they just disconnect
                }
                else if (CurrentState == ExchangeRescueState.Completed)
                {
                    ActivitySendHelp sendHelp = NetworkManager.Instance.Activity as ActivitySendHelp;
                    //wait for the other party to also be Completed to leave the transaction
                    if (sendHelp.CurrentState == ExchangeRescueState.Completed)
                    {
                        MenuManager.Instance.RemoveMenu();
                        NetworkManager.Instance.Disconnect();
                    }
                }

                UpdateStatus();
            }
        }
コード例 #13
0
        public override IEnumerator <YieldInstruction> EndGame(ResultType result, ZoneLoc nextArea, bool display, bool fanfare)
        {
            Outcome = result;
            bool   recorded   = DataManager.Instance.RecordingReplay;
            string recordFile = null;

            if (result == ResultType.Rescue)
            {
                Location = ZoneManager.Instance.CurrentZone.GetDisplayName();

                DataManager.Instance.MsgLog.Clear();
                //end the game with a recorded ending
                recordFile = DataManager.Instance.EndPlay(this, StartDate);

                SOSMail    sos         = Rescue.SOS;
                string     dateRescued = String.Format("{0:yyyy-MM-dd}", DateTime.Now);
                ReplayData replay      = DataManager.Instance.LoadReplay(PathMod.ModSavePath(DataManager.REPLAY_PATH, recordFile), false);
                AOKMail    aok         = new AOKMail(sos, DataManager.Instance.Save, dateRescued, replay);
                GeneratedAOK = DataManager.SaveRescueMail(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.AOK_FOLDER), aok, false);
                string deletePath = DataManager.FindRescueMail(PathMod.NoMod(DataManager.RESCUE_IN_PATH + DataManager.SOS_FOLDER), sos, sos.Extension);
                if (deletePath != null)
                {
                    File.Delete(deletePath);
                }

                if (nextArea.IsValid()) //  if an exit is specified, go to the exit.
                {
                    NextDest = nextArea;
                }
                else
                {
                    NextDest = new ZoneLoc(1, new SegLoc(-1, 1));
                }
            }
            else if (result != ResultType.Cleared)
            {
                if (GameManager.Instance.CurrentScene == GroundScene.Instance)
                {
                    Location = ZoneManager.Instance.CurrentGround.GetColoredName();
                }
                else if (GameManager.Instance.CurrentScene == DungeonScene.Instance)
                {
                    Location = ZoneManager.Instance.CurrentMap.GetColoredName();
                }

                DataManager.Instance.MsgLog.Clear();
                //end the game with a recorded ending
                recordFile = DataManager.Instance.EndPlay(this, StartDate);

                if (Outcome != ResultType.Escaped && Stakes == DungeonStakes.Risk) //remove all items
                {
                    LossPenalty(this);
                }

                if (nextArea.IsValid()) //  if an exit is specified, go to the exit.
                {
                    NextDest = nextArea;
                }
                else
                {
                    NextDest = new ZoneLoc(1, new SegLoc(-1, 1));
                }
            }
            else
            {
                int completedZone = ZoneManager.Instance.CurrentZoneID;
                DungeonUnlocks[completedZone] = UnlockState.Completed;

                Location = ZoneManager.Instance.CurrentZone.GetDisplayName();

                DataManager.Instance.MsgLog.Clear();
                //end the game with a recorded ending
                recordFile = DataManager.Instance.EndPlay(this, StartDate);

                if (nextArea.IsValid()) //  if an exit is specified, go to the exit.
                {
                    NextDest = nextArea;
                }
                else
                {
                    NextDest = new ZoneLoc(1, new SegLoc(-1, 1));
                }
            }

            TotalAdventures++;

            foreach (Character character in ActiveTeam.EnumerateChars())
            {
                character.Dead = false;
                character.FullRestore();
            }
            foreach (Character character in ActiveTeam.Assembly)
            {
                character.Dead = false;
                character.FullRestore();
            }
            MidAdventure = false;
            ClearDungeonItems();
            //clear rescue status
            Rescue = null;

            //merge back the team if the dungeon was level-limited
            yield return(CoroutineManager.Instance.StartCoroutine(RestoreLevel()));

            GameState    state    = DataManager.Instance.LoadMainGameState();
            MainProgress mainSave = state?.Save as MainProgress;

            //save the result to the main file
            if (Stakes != DungeonStakes.None)
            {
                if (mainSave != null)
                {
                    mainSave.MergeDataTo(this);
                }
                DataManager.Instance.SaveMainGameState();
            }
            else
            {
                if (mainSave != null)
                {
                    DataManager.Instance.SetProgress(mainSave);
                }
                DataManager.Instance.Save.NextDest = NextDest;
            }

            MenuBase.Transparent = false;

            if (recorded && display)
            {
                GameProgress ending = DataManager.Instance.GetRecord(PathMod.ModSavePath(DataManager.REPLAY_PATH, recordFile));

                if (fanfare)
                {
                    if (result != ResultType.Cleared && result != ResultType.Escaped && result != ResultType.Rescue)
                    {
                        GameManager.Instance.Fanfare("Fanfare/MissionFail");
                    }
                    else
                    {
                        GameManager.Instance.Fanfare("Fanfare/MissionClear");
                    }
                }
                else
                {
                    GameManager.Instance.SE("Menu/Skip");
                }

                FinalResultsMenu menu = new FinalResultsMenu(ending);
                yield return(CoroutineManager.Instance.StartCoroutine(MenuManager.Instance.ProcessMenuCoroutine(menu)));
            }

            yield return(new WaitForFrames(20));
        }