using System.Collections.Generic; using Godot; public partial class Talk { private static List possible = new List(); private static List mult = new List(); public static void DoTalk() { possible.Clear(); mult.Clear(); Party.StopMoving(); if (Player.instance.followers.Count == 0 || SaveFile.current.activeParty.Count == 1) { TextSystem.GetText("TalkNoPartner"); return; } if (!HasFlag(SaveFile.Flags.Day1End, activate: false)) { if (SaveFile.current.values[5] > 11) { if (Room.current.id == Room.IDs.Hospital) { TextSystem.GetText("KanakoD1Talk"); return; } if (Room.current.id == Room.IDs.WildEastSouth) { TextSystem.GetText("KanakoFishD1"); return; } } if (!SaveFile.HasFlag(SaveFile.Flags.SchoolFountainSealed) && SaveFile.HasFlag(SaveFile.Flags.BearingFought) && !SaveFile.HasFlag(SaveFile.Flags.WeirdStart) && !HasFlag(SaveFile.Flags.KanakoTalkPostBearingF)) { if (SaveFile.HasFlag(SaveFile.Flags.BearingSpared)) { TextSystem.GetText("KanakoTalkPostBearSpare"); } else if (SaveFile.HasFlag(SaveFile.Flags.BearingCaught)) { TextSystem.GetText("KanakoTalkPostBearCatch"); } else { TextSystem.GetText("KanakoTalkPostBearFight"); } return; } if (SaveFile.current.values[5] == 10) { if (SaveFile.HasFlag(SaveFile.Flags.SchoolCheckedLock)) { if (Room.current.id == Room.IDs.SchoolCloset) { TextSystem.GetText("KanakoTalkSchoolLockedTrapdoor"); } else { TextSystem.GetText("KanakoTalkSchoolLocked2"); } } else { TextSystem.GetText("KanakoTalkSchoolLocked"); } return; } if (SaveFile.current.values[5] == 11) { if (SaveFile.HasFlag(SaveFile.Flags.WardenTalkEndDay1)) { TextSystem.GetText("KanakoTalkPostWardenDay1"); } else { TextSystem.GetText("KanakoTalkPostTrapdoor"); } return; } if (Room.current.id == Room.IDs.SchoolDWFoxRoom) { if (!SaveFile.HasFlag(SaveFile.Flags.FoxDefeated) && SaveFile.HasFlag(SaveFile.Flags.FoxFirstTalk)) { TextSystem.GetText("KanakoTalkFoxQuest"); } else if (SaveFile.HasFlag(SaveFile.Flags.FoxGotItem)) { if (Items.HasItem(Items.IDs.FoxNecklace)) { TextSystem.GetText("KanakoTalkPostFoxNecklace"); } else { TextSystem.GetText("KanakoTalkPostFox"); } } else { TextSystem.GetText("KanakoTalkFoxRoom"); } return; } if (SaveFile.current.flags.Contains(SaveFile.Flags.WeirdStart)) { if (Room.current.id == Room.IDs.SchoolDWLake && !HasFlag(SaveFile.Flags.KanakoLakeWeird)) { TextSystem.GetText("KanakoLakeWeird"); return; } if (Room.current.id == Room.IDs.SchoolDWFortPrison && !SaveFile.HasFlag(SaveFile.Flags.LuncherFought)) { TextSystem.GetText("KanakoTalkBearPrisonWeird"); return; } } else if (SaveFile.current.values[5] < 10) { if (Room.current.id == Room.IDs.SchoolDWFortTreasure) { SchoolTreasureRoom instance = SchoolTreasureRoom.instance; if (instance != null && instance.started) { TextSystem.GetText("TreasureRoomEvent3"); return; } if (!HasFlag(SaveFile.Flags.BearFortTreasureTalk)) { TextSystem.GetText("KanakoTalkBearTreasureRoom"); return; } if (SaveFile.HasFlag(SaveFile.Flags.BearFortTreasureRoom) && !HasFlag(SaveFile.Flags.KanakoTalkTreasurePost)) { if (SaveFile.HasFlag(SaveFile.Flags.BearFortGotTreasure) && !SaveFile.HasFlag(SaveFile.Flags.BearFortTreasureInvFull)) { TextSystem.GetText("KanakoTalkBearTreasureWon"); } else if (SaveFile.HasFlag(SaveFile.Flags.BearFortTreasureInvFull)) { TextSystem.GetText("KanakoTalkBearTreasureFull"); } else { TextSystem.GetText("KanakoTalkBearTreasureLost"); } return; } } if (Room.current.id == Room.IDs.SchoolDWFortPrison) { if (!HasFlag(SaveFile.Flags.KanakoTalkBearPrison)) { TextSystem.GetText("KanakoTalkBearPrison"); return; } if (!HasFlag(SaveFile.Flags.LuncherFought, activate: false)) { TextSystem.GetText("KanakoTalkBearPrison2"); return; } } if (SaveFile.current.values[5] != 2) { if (Room.current.id == Room.IDs.SchoolDWFortBigCorridor && !HasFlag(SaveFile.Flags.KanakoTalkFortBigCorridor)) { TextSystem.GetText("KanakoTalkFortBigCorridor"); return; } if (Room.current.id == Room.IDs.SchoolDWFortRest && !HasFlag(SaveFile.Flags.KanakoTalkBreakRoom)) { TextSystem.GetText("KanakoBreakRoomTalk"); return; } if (Room.current.id == Room.IDs.SchoolDWFortLeft) { if (!SaveFile.HasFlag(SaveFile.Flags.BBallPlayedOnce) && !HasFlag(SaveFile.Flags.BBallKanakoTalk1)) { TextSystem.GetText("KanakoBBallRoom"); return; } if (SaveFile.HasFlag(SaveFile.Flags.BBallPlayedOnce) && !SaveFile.HasFlag(SaveFile.Flags.BearFortLeftMinigame) && !HasFlag(SaveFile.Flags.BBallKanakoTalk2)) { TextSystem.GetText("KanakoBBallLost"); return; } if (SaveFile.HasFlag(SaveFile.Flags.BearFortLeftMinigame) && !HasFlag(SaveFile.Flags.BBallKanakoTalk3)) { TextSystem.GetText("KanakoBBallWon"); return; } } if ((Room.current.id == Room.IDs.SchoolDWFortFirstPuzzle || Room.current.id == Room.IDs.SchoolDWFortressRightmost) && !HasFlag(SaveFile.Flags.KanakoTalkBFortFirstPRoom)) { TextSystem.GetText("KanakoInsideFortTalk"); return; } if (SaveFile.current.flags.Contains(SaveFile.Flags.BeatMemoryGame) && !HasFlag(SaveFile.Flags.KanakoMemoryGameRoomAfter)) { TextSystem.GetText("KanakoPostMemGame"); return; } if (Room.current.id == Room.IDs.SchoolDWPenny && ((MemoryGame)Room.current.eventPointers[1]).running && !HasFlag(SaveFile.Flags.KanakoMemoryGameInProgress)) { TextSystem.GetText("KanakoTalkDuringMemGame"); return; } if (Room.current.id == Room.IDs.SchoolDWPenny && !HasFlag(SaveFile.Flags.KanakoMemoryGameRoomBefore)) { TextSystem.GetText("KanakoBeforeMemoryGame"); return; } if (Room.current.id == Room.IDs.SchoolDWBridge && !HasFlag(SaveFile.Flags.KanakoLandscapeDiag)) { TextSystem.GetText("KanakoLandscapeTalk"); return; } if (Room.current.id == Room.IDs.SchoolDWCenter && !HasFlag(SaveFile.Flags.KanakoTownDiag)) { TextSystem.GetText("KanakoTownDiag"); return; } if (Room.current.id == Room.IDs.SchoolDWLake && !HasFlag(SaveFile.Flags.KanakoLakeTalk)) { TextSystem.GetText("KanakoLakeTalk"); return; } if (HasFlag(SaveFile.Flags.DidApprehendTutorial, activate: false) && !HasFlag(SaveFile.Flags.KanakoTalkAfterTutorial)) { TextSystem.GetText("KanakoAfterWardenTutorial"); return; } if (SaveFile.current.apprehended.Count >= 2 && !SaveFile.HasFlag(SaveFile.Flags.WardenInnocentTalk) && !HasFlag(SaveFile.Flags.KanakoApprehendTalk)) { TextSystem.GetText("KanakoTalkApprehend"); return; } if (SaveFile.current.values[6] > 3 && !HasFlag(SaveFile.Flags.WeaponTalk)) { TextSystem.GetText("KanakoTalkWeapon"); return; } if (Room.current.id == Room.IDs.DarkPrisonNorth && !HasFlag(SaveFile.Flags.BearingFought, activate: false) && !HasFlag(SaveFile.Flags.KanakoTalkNorthPrisonTalk)) { TextSystem.GetText("KanakoTalkPrisonNorth"); return; } if (Room.current.id == Room.IDs.DarkPrisonSouth && !HasFlag(SaveFile.Flags.BearingDefeated, activate: false) && !HasFlag(SaveFile.Flags.DarkPrisonSouthTalk)) { TextSystem.GetText("KanakoTalkJailSouth"); return; } if (Room.current.id == Room.IDs.DarkPrisonRight) { if (!HasFlag(SaveFile.Flags.WardenExposited, activate: false) && !HasFlag(SaveFile.Flags.DarkPrisonRightTalk)) { TextSystem.GetText("KanakoTalkJailRight"); return; } if (SaveFile.HasFlag(SaveFile.Flags.WardenExposited) && !SaveFile.HasFlag(SaveFile.Flags.WarpDoorFirst) && !HasFlag(SaveFile.Flags.KTalkPrisonRightBD)) { TextSystem.GetText("KTalkDoorFirst"); return; } } if (SaveFile.current.values[5] >= 1 && !HasFlag(SaveFile.Flags.KanakoBearTalk)) { TextSystem.GetText("KanakoBearTalk"); return; } if (SaveFile.current.values[5] != 1) { if (SaveFile.current.values[5] < 1 && !HasFlag(SaveFile.Flags.KanakoFirstDWTalk)) { TextSystem.GetText("KanakoTalkAfterRescue"); return; } if ((Room.current.id == Room.IDs.SchoolDWAfterKanako2 || Room.current.id == Room.IDs.SchoolDWAfterKanako) && !HasFlag(SaveFile.Flags.KanakoRoomAfterRescueTalk)) { TextSystem.GetText("KanakoTalkPencilRoom"); return; } } } } } else if (!HasFlag(SaveFile.Flags.Day2End, activate: false) && !SaveFile.HasFlag(SaveFile.Flags.WeirdStart)) { if (Room.current.id == Room.IDs.WildEastSouth && !HasFlag(SaveFile.Flags.KanakoFishFirstTalk)) { TextSystem.GetText("KanakoFishD2"); return; } if (Room.current.id == Room.IDs.Hospital) { TextSystem.GetText("KanakoD1Talk"); return; } if (SaveFile.current.values[5] >= 23) { if (SaveFile.HasFlag(SaveFile.Flags.RangerEvent) && !HasFlag(SaveFile.Flags.RangerTalk)) { TextSystem.GetText("KanakoRangerTalk"); return; } if (!HasFlag(SaveFile.Flags.KanakoFountainTalk)) { TextSystem.GetText("KanakoFountainTalk"); return; } if (!HasFlag(SaveFile.Flags.KanakoTosterTalk)) { TextSystem.GetText("KanakoToasterTalk"); return; } if (!HasFlag(SaveFile.Flags.UpstairsTalk2)) { TextSystem.GetText("KanakoUpstairsTalk2"); return; } } else if (SaveFile.current.values[5] == 22) { if (SaveFile.current.followers.Contains(Entity.IDs.BunBun)) { if (!HasFlag(SaveFile.Flags.FirstUpstairsTalk)) { TextSystem.GetText("KanakoUpstairsFirstTalk"); return; } if (!HasFlag(SaveFile.Flags.UpstairsTalk2)) { TextSystem.GetText("KanakoUpstairsTalk2"); return; } } if (Room.current.id == Room.IDs.ChujinDWPostTram4) { TextSystem.GetText("KanakoTalkCityEndDW2"); return; } } else { if (SaveFile.current.values[5] == 21) { if (!SaveFile.HasFlag(SaveFile.Flags.KanakoFollowing) && !HasFlag(SaveFile.Flags.AxisSoloTalk)) { TextSystem.GetText("AxisSoloTalk"); return; } if (Room.current.id == Room.IDs.ChujinDWPostTram3 && !SaveFile.HasFlag(SaveFile.Flags.KanakoFollowing) && !HasFlag(SaveFile.Flags.AxisTrashPuzzleTalk)) { TextSystem.GetText("AxisTrashPuzzleTalk"); return; } } else if (SaveFile.current.values[5] == 20) { if (Room.current.id == Room.IDs.ChujinDWInsideTrain) { TextSystem.GetText("KanakoTramTalk"); return; } if (Room.current.id == Room.IDs.ChujinDWFactoryStation) { if (!Room.current.tempValue.ContainsKey(ChujinDWEvents.tram)) { Room.current.tempValue.Add(ChujinDWEvents.tram, 0); } GD.Print(Room.current.tempValue[ChujinDWEvents.tram]); TextSystem.GetText("KanakoTramTalk" + Room.current.tempValue[ChujinDWEvents.tram]); return; } if (!HasFlag(SaveFile.Flags.ClawTalk)) { TextSystem.GetText("KanakoTalkPostClaw"); return; } goto IL_0ac6; } if (Room.current.id == Room.IDs.ChujinDWFactoryLeft && !SaveFile.HasFlag(SaveFile.Flags.FactoryPuzzle2) && !HasFlag(SaveFile.Flags.TalkFactoryLeft)) { TextSystem.GetText("KanakoTalkFactoryLeft"); return; } if (Room.current.id == Room.IDs.ChujinDWFactoryRight && !HasFlag(SaveFile.Flags.TalkFactoryRight)) { TextSystem.GetText("KanakoTalkCh2SplitGate"); return; } if (SaveFile.HasFlag(SaveFile.Flags.DW2TownTVEvent) && !HasFlag(SaveFile.Flags.AxisPuzzleTalk)) { TextSystem.GetText("AxisPuzzleTalk"); return; } if (SaveFile.HasFlag(SaveFile.Flags.AxisFollowing) && !HasFlag(SaveFile.Flags.AxisFirstTalk)) { TextSystem.GetText("AxisFirstTalk"); return; } if ((Room.current.id == Room.IDs.ChujinDWSouthPuzzle || Room.current.id == Room.IDs.ChujinDWBeforeTown) && !HasFlag(SaveFile.Flags.KanakoTalkWaterGun)) { TextSystem.GetText("KanakoTalkCapacitorRoom"); return; } if (SaveFile.HasFlag(SaveFile.Flags.DW2Overview) && !HasFlag(SaveFile.Flags.DW2PlanTalk)) { TextSystem.GetText("DW2PlanTalk"); return; } if (Room.current.id == Room.IDs.ChujinDWLongSlide) { if (!SaveFile.HasFlag(SaveFile.Flags.AxisEvent)) { if (Player.instance.GlobalPosition.Y < 60f) { TextSystem.GetText("KanakoTalkDW2Slide"); } else { TextSystem.GetText("KanakoTalkDW2Slide2"); } return; } if (!HasFlag(SaveFile.Flags.AxisTalkSlide)) { TextSystem.GetText("AxisTalkSlide"); return; } } if (Room.current.id == Room.IDs.ChujinDWFirstCorridor) { TextSystem.GetText("KanakoTalkDW2FirstCorridor"); return; } if (Room.current.id == Room.IDs.ChujinDWEntrance && !HasFlag(SaveFile.Flags.KanakoRedLetterDWEntTalk)) { TextSystem.GetText("KanakoTalkRedLetterDW"); return; } } } goto IL_0ac6; IL_0ac6: for (int i = 1; i < 5; i++) { if (SaveFile.current.activeParty.Contains(i)) { mult.Add(i); } } switch (mult[Main.RandomRange(0, mult.Count - 1)]) { case 1: if (SaveFile.current.flags.Contains(SaveFile.Flags.WeirdStart)) { TextSystem.GetText("KanakoNoTalkWeird"); } else { TextSystem.GetText("KanakoNoTalk"); } break; case 2: TextSystem.GetText("AxisNoTalk"); break; case 3: TextSystem.GetText("JuneNoTalk"); break; case 4: TextSystem.GetText("MelodyNoTalk"); break; } } private static bool HasFlag(SaveFile.Flags f, bool activate = true) { if (SaveFile.current.flags.Contains(f)) { return true; } if (activate) { SaveFile.AddFlag(f); } return false; } }