Пример #1
0
        public static bool PreFLoadGameFromSaveFile(string fileName)
        {
            string str = GenText.ToCommaList(from mod in LoadedModManager.RunningMods
                                             select mod.ToString(), true);

            Log.Message("Loading game from file " + fileName + " with mods " + str);
            DeepProfiler.Start("Loading game from file " + fileName);
            Current.Game = new Game();
            DeepProfiler.Start("InitLoading (read file)");
            Scribe.loader.InitLoading(GenFilePaths.FilePathForSavedGame(fileName));
            DeepProfiler.End();
            ScribeMetaHeaderUtility.LoadGameDataHeader(ScribeMetaHeaderUtility.ScribeHeaderMode.Map, true);
            bool flag = !Scribe.EnterNode("Κgame");
            bool result;

            if (flag)
            {
                Log.Error("Could not find DTMG XML node.");
                Scribe.ForceStop();
                GenScene.GoToMainMenu();
                Messages.Message("Game MUST be created with 'Don't Tempt Me!' loaded. Please select a 'Don't Tempt Me!' save game file.", MessageTypeDefOf.RejectInput);
                result = false;
            }
            else
            {
                Current.Game = new Game();
                Current.Game.LoadGame();
                PermadeathModeUtility.CheckUpdatePermadeathModeUniqueNameOnGameLoad(fileName);
                DeepProfiler.End();
                result = false;
            }
            return(result);
        }
 public static void Named(string s)
 {
     Faction.OfPlayer.Name = s;
     if (Find.GameInfo.permadeathMode)
     {
         string oldSavefileName = Find.GameInfo.permadeathModeUniqueName;
         string newSavefileName = PermadeathModeUtility.GeneratePermadeathSaveNameBasedOnPlayerInput(s, oldSavefileName);
         if (oldSavefileName != newSavefileName)
         {
             LongEventHandler.QueueLongEvent(delegate
             {
                 Find.GameInfo.permadeathModeUniqueName = newSavefileName;
                 Find.Autosaver.DoAutosave();
                 GenFilePaths.AllSavedGameFiles.FirstOrDefault((FileInfo x) => Path.GetFileNameWithoutExtension(x.Name) == oldSavefileName)?.Delete();
             }, "Autosaving", doAsynchronously: false, null);
         }
     }
 }
Пример #3
0
        private static void LoadGameFromTmpSave(string fileName)
        {
            string str = GenText.ToCommaList(from mod in LoadedModManager.RunningMods
                                             select mod.ToString());

            Log.Message("Loading game with colony " + fileName + " with mods " + str);

            MemoryUtility.ClearAllMapsAndWorld();
            Current.Game = new Game();
            Scribe.loader.InitLoading(FilePathForTmpSave());
            ScribeMetaHeaderUtility.LoadGameDataHeader(ScribeMetaHeaderUtility.ScribeHeaderMode.Map, logVersionConflictWarning: true);
            if (Scribe.EnterNode("game"))
            {
                Current.Game = new Game();
                Current.Game.LoadGame();
                PermadeathModeUtility.CheckUpdatePermadeathModeUniqueNameOnGameLoad(fileName);
            }
            else
            {
                Log.Error("Could not find game XML node.");
                Scribe.ForceStop();
            }
            RemoveTmpSave();
        }
Пример #4
0
        public static void GenerateEmptyMap()
        {
            LongEventHandler.QueueLongEvent(delegate()
            {
                var game = new Game
                {
                    InitData = new GameInitData()
                    {
                        mapSize = 75, permadeath = false
                    },
                    Scenario    = ScenarioDefOf.Crashlanded.scenario,
                    storyteller = new Storyteller(StorytellerDefOf.Cassandra, DifficultyDefOf.Rough)
                };
                Find.Scenario.PreConfigure();
                Current.Game = game;

                Find.GameInitData.PrepForMapGen();
                Find.GameInitData.startedFromEntry = true;
                Find.Scenario.PreMapGenerate();

                Find.GameInitData.ResetWorldRelatedMapInitData();
                Current.Game.World = WorldGenerator.GenerateWorld(0.05f, GenText.RandomSeedString(), OverallRainfall.Normal, OverallTemperature.Normal, OverallPopulation.Normal);
                MemoryUtility.UnloadUnusedUnityAssets();
                Find.World.renderer.RegenerateAllLayersNow();

                MemoryUtility.UnloadUnusedUnityAssets();

                Current.ProgramState = ProgramState.MapInitializing;

                var mapSize = new IntVec3(game.InitData.mapSize, 1, game.InitData.mapSize);
                game.World.info.initialMapSize = mapSize;
                if (game.InitData.permadeath)
                {
                    game.Info.permadeathMode           = true;
                    game.Info.permadeathModeUniqueName = PermadeathModeUtility.GeneratePermadeathSaveName();
                }

                game.tickManager.gameStartAbsTick = GenTicks.ConfiguredTicksAbsAtGameStart;

                _ = Find.Scenario.parts.RemoveAll(part => part is ScenPart_GameStartDialog);
                var arrivalMethod    = Find.Scenario.AllParts.OfType <ScenPart_PlayerPawnsArriveMethod>().First();
                arrivalMethod.method = PlayerPawnsArriveMethod.Standing;

                var tile = TileFinder.RandomStartingTile();

                Find.GameInitData.startingAndOptionalPawns.Clear();

                for (var i = 1; i <= 3; i++)
                {
                    var pawn = StartingPawnUtility.NewGeneratedStartingPawn();
                    pawn.playerSettings.hostilityResponse = HostilityResponseMode.Ignore;
                    DefDatabase <SkillDef> .AllDefsListForReading.Do(skillDef => pawn.skills.GetSkill(skillDef).EnsureMinLevelWithMargin(1));
                    Find.GameInitData.startingAndOptionalPawns.Add(pawn);
                }

                var settlement = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);
                settlement.SetFaction(Find.GameInitData.playerFaction);
                settlement.Tile = tile;
                settlement.Name = NameGenerator.GenerateName(Faction.OfPlayer.def.factionNameMaker);
                Find.WorldObjects.Add(settlement);

                Current.Game.CurrentMap = MapGenerator.GenerateMap(mapSize, settlement, settlement.MapGeneratorDef, settlement.ExtraGenStepDefs, null);
                PawnUtility.GiveAllStartingPlayerPawnsThought(ThoughtDefOf.NewColonyOptimism);

                game.FinalizeInit();
                game.playSettings.useWorkPriorities = true;

                Find.CameraDriver.JumpToCurrentMapLoc(MapGenerator.PlayerStartSpot);
                Find.CameraDriver.ResetSize();
                Find.Scenario.PostGameStart();

                foreach (var researchProjectDef in DefDatabase <ResearchProjectDef> .AllDefs)
                {
                    game.researchManager.FinishProject(researchProjectDef, false, null);
                }

                GameComponentUtility.StartedNewGame();
                game.InitData = null;
            }, "GeneratingMap", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap), true);
            LongEventHandler.QueueLongEvent(delegate()
            {
                ScreenFader.SetColor(Color.black);
                ScreenFader.StartFade(Color.clear, 0.5f);
            }, null, false, null, true);
        }