public void LoadWorld() { Current.Game = this.Game; LongEventHandler.SetCurrentEventText("FilUnderscore.PersistentRimWorlds.Loading.World".Translate()); this.Game.LoadGame(); LongEventHandler.SetCurrentEventText("FilUnderscore.PersistentRimWorlds.Loading.Game.Finalizing".Translate()); // At the end.. because Scribe doesn't run due to us not loading Game directly. this.Game.FinalizeInit(); this.LoadCameraDriver(); SchedulePause(); GameComponentUtility.LoadedGame(); this.CheckAndSetColonyData(); Log.Message("Faction count: " + Current.Game.World.factionManager.AllFactions.Count()); Current.Game.World.factionManager.AllFactions.Do((faction) => { Log.Message("Faction Name: " + faction.Name); Log.Message("Faction ID: " + faction.loadID); Log.Message("Type: " + faction.def.defName); Log.Message("Relations: " + ((List <FactionRelation>)RelationsField.GetValue(faction)).ToDebugString()); }); }
public static void TickManagerTick(TickManager tm, bool firstRun = true) { float mult = TimeControlSettings.speedMultiplier; if (firstRun) { partialTick += 1.0 / mult; } List <Map> maps = Find.Maps; for (int i = 0; i < maps.Count; i++) { maps[i].MapPreTick(); } if (partialTick >= 1.0) { if (!DebugSettings.fastEcology) { TickUtility.ticksGameInt++; } else { TickUtility.ticksGameInt += 2000; } } if (firstRun || TimeControlSettings.dontScale) { if (!DebugSettings.fastEcology) { TickUtility.adjustedTicksGameInt++; } else { TickUtility.adjustedTicksGameInt += 2000; } } Shader.SetGlobalFloat(ShaderPropertyIDs.GameSeconds, tm.TicksGame.TicksToSeconds() * mult); TickUtility.tickListNormal.DoTick(partialTick, firstRun); TickUtility.tickListRare.DoTick(partialTick, firstRun); TickUtility.tickListLong.DoTick(partialTick, firstRun); if (partialTick >= 1.0) { try { Find.DateNotifier.DateNotifierTick(); } catch (Exception ex) { Log.Error(ex.ToString(), false); } try { Find.Scenario.TickScenario(); } catch (Exception ex2) { Log.Error(ex2.ToString(), false); } try { Find.World.WorldTick(); } catch (Exception ex3) { Log.Error(ex3.ToString(), false); } try { Find.StoryWatcher.StoryWatcherTick(); } catch (Exception ex4) { Log.Error(ex4.ToString(), false); } try { Find.GameEnder.GameEndTick(); } catch (Exception ex5) { Log.Error(ex5.ToString(), false); } try { Find.Storyteller.StorytellerTick(); } catch (Exception ex6) { Log.Error(ex6.ToString(), false); } try { Find.TaleManager.TaleManagerTick(); } catch (Exception ex7) { Log.Error(ex7.ToString(), false); } try { Find.QuestManager.QuestManagerTick(); } catch (Exception ex8) { Log.Error(ex8.ToString(), false); } try { Find.World.WorldPostTick(); } catch (Exception ex9) { Log.Error(ex9.ToString(), false); } for (int j = 0; j < maps.Count; j++) { maps[j].MapPostTick(); } try { Find.History.HistoryTick(); } catch (Exception ex10) { Log.Error(ex10.ToString(), false); } GameComponentUtility.GameComponentTick(); try { Find.LetterStack.LetterStackTick(); } catch (Exception ex11) { Log.Error(ex11.ToString(), false); } try { Find.Autosaver.AutosaverTick(); } catch (Exception ex12) { Log.Error(ex12.ToString(), false); } if (DebugViewSettings.logHourlyScreenshot && Find.TickManager.TicksGame >= TickUtility.lastAutoScreenshot + 2500) { ScreenshotTaker.QueueSilentScreenshot(); TickUtility.lastAutoScreenshot = Find.TickManager.TicksGame / 2500 * 2500; } try { TickUtility.FilthMonitorTick(); } catch (Exception ex13) { Log.Error(ex13.ToString(), false); } partialTick -= 1.0; } else { for (int j = 0; j < maps.Count; j++) { maps[j].resourceCounter.ResourceCounterTick(); } } UnityEngine.Debug.developerConsoleVisible = false; if (partialTick >= 1.0) { TickManagerTick(tm, false); } }
private static void CompletePostWorkLists() { if (Interlocked.Increment(ref workingOnDateNotifierTick) == 0) { try { Find.DateNotifier.DateNotifierTick(); } catch (Exception ex) { Log.Error(ex.ToString()); } } if (Interlocked.Increment(ref workingOnHistoryTick) == 0) { try { Find.History.HistoryTick(); } catch (Exception ex10) { Log.Error(ex10.ToString()); } } if (Interlocked.Increment(ref workingOnMiscellaneous) == 0) { try { Find.Scenario.TickScenario(); } catch (Exception ex2) { Log.Error(ex2.ToString()); } try { Find.StoryWatcher.StoryWatcherTick(); } catch (Exception ex4) { Log.Error(ex4.ToString()); } try { Find.GameEnder.GameEndTick(); } catch (Exception ex5) { Log.Error(ex5.ToString()); } try { Find.Storyteller.StorytellerTick(); } catch (Exception ex6) { Log.Error(ex6.ToString()); } try { Find.TaleManager.TaleManagerTick(); } catch (Exception ex7) { Log.Error(ex7.ToString()); } try { Find.QuestManager.QuestManagerTick(); } catch (Exception ex8) { Log.Error(ex8.ToString()); } try { Find.World.WorldPostTick(); } catch (Exception ex9) { Log.Error(ex9.ToString()); } GameComponentUtility.GameComponentTick(); try { Find.LetterStack.LetterStackTick(); } catch (Exception ex11) { Log.Error(ex11.ToString()); } try { Find.Autosaver.AutosaverTick(); } catch (Exception ex12) { Log.Error(ex12.ToString()); } try { FilthMonitor2.FilthMonitorTick(); } catch (Exception ex13) { Log.Error(ex13.ToString()); } } }
static bool Prefix(Game __instance) { if (!PersistentWorldManager.GetInstance().PersistentWorldNotNull()) { return(true); } var persistentWorld = PersistentWorldManager.GetInstance().PersistentWorld; var game = __instance; MemoryUtility.UnloadUnusedUnityAssets(); Current.ProgramState = ProgramState.MapInitializing; var mapSize = new IntVec3(__instance.InitData.mapSize, 1, __instance.InitData.mapSize); var settlement = (Settlement)null; var settlements = Find.WorldObjects.Settlements; foreach (var t in settlements) { if (t.Faction != Faction.OfPlayer) { continue; } settlement = t; break; } if (settlement == null) { Log.Error("Could not generate starting map because there is no player faction base."); GenScene.GoToMainMenu(); return(false); } var map = MapGenerator.GenerateMap(mapSize, settlement, settlement.MapGeneratorDef, settlement.ExtraGenStepDefs, null); game.CurrentMap = map; // TODO: Implement permanent death mode for colonies. if (__instance.InitData.permadeath) { __instance.Info.permadeathMode = true; } PawnUtility.GiveAllStartingPlayerPawnsThought(ThoughtDefOf.NewColonyOptimism); __instance.FinalizeInit(); Find.CameraDriver.JumpToCurrentMapLoc(MapGenerator.PlayerStartSpot); Find.CameraDriver.ResetSize(); persistentWorld.SchedulePause(); Find.Scenario.PostGameStart(); /* * Complete research needed depending if PlayerFaction is PlayerColony or PlayerTribe. */ if (Faction.OfPlayer.def.startingResearchTags != null) { foreach (var startingResearchTag in Faction.OfPlayer.def.startingResearchTags) { foreach (var allDef in DefDatabase <ResearchProjectDef> .AllDefs) { if (allDef.HasTag(startingResearchTag)) { game.researchManager.FinishProject(allDef, false, null); } } } } GameComponentUtility.StartedNewGame(); persistentWorld.LoadSaver.Status = PersistentWorldLoadSaver.PersistentWorldLoadStatus.Ingame; var colony = PersistentColony.Convert(persistentWorld, Current.Game); colony.ColonyData.UniqueId = ++PersistentWorldManager.GetInstance().PersistentWorld.WorldData.NextColonyId; colony.ColonyData.ActiveWorldTiles.Add(map.Tile); colony.GameData.MapSize = __instance.InitData.mapSize; game.InitData = null; persistentWorld.Colony = colony; persistentWorld.CheckAndSetColonyData(); persistentWorld.Colonies.Add(colony); persistentWorld.LoadedMaps.Add(map.Tile, new HashSet <PersistentColony>() { colony }); return(false); }
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); }
public static void DoSingleTickDetour(TickManager __instance) { FieldInfo gameTicks = typeof(TickManager).GetField("ticksGameInt", BindingFlags.NonPublic | BindingFlags.Instance); FieldInfo nTicks = typeof(TickManager).GetField("tickListNormal", BindingFlags.NonPublic | BindingFlags.Instance); FieldInfo rTicks = typeof(TickManager).GetField("tickListRare", BindingFlags.NonPublic | BindingFlags.Instance); FieldInfo lTicks = typeof(TickManager).GetField("tickListLong", BindingFlags.NonPublic | BindingFlags.Instance); List <Map> maps = Find.Maps; Parallel.For(0, maps.Count, i => { maps[i].MapPreTick(); }); if (!DebugSettings.fastEcology) { gameTicks.SetValue(__instance, (int)gameTicks.GetValue(__instance) + 1); } else { gameTicks.SetValue(__instance, (int)gameTicks.GetValue(__instance) + 250); } Shader.SetGlobalFloat(ShaderPropertyIDs.GameSeconds, ((int)gameTicks.GetValue(__instance)).TicksToSeconds()); ((TickList)nTicks.GetValue(__instance)).Tick(); ((TickList)rTicks.GetValue(__instance)).Tick(); ((TickList)lTicks.GetValue(__instance)).Tick(); try { Find.DateNotifier.DateNotifierTick(); } catch (Exception ex) { Log.Error(ex.ToString()); } try { Find.Scenario.TickScenario(); } catch (Exception ex2) { Log.Error(ex2.ToString()); } try { Find.World.WorldTick(); } catch (Exception ex3) { Log.Error(ex3.ToString()); } try { Find.StoryWatcher.StoryWatcherTick(); } catch (Exception ex4) { Log.Error(ex4.ToString()); } try { Find.GameEnder.GameEndTick(); } catch (Exception ex5) { Log.Error(ex5.ToString()); } try { Find.Storyteller.StorytellerTick(); } catch (Exception ex6) { Log.Error(ex6.ToString()); } try { Current.Game.taleManager.TaleManagerTick(); } catch (Exception ex7) { Log.Error(ex7.ToString()); } try { Find.World.WorldPostTick(); } catch (Exception ex8) { Log.Error(ex8.ToString()); } for (int j = 0; j < maps.Count; j++) { maps[j].MapPostTick(); } try { Find.History.HistoryTick(); } catch (Exception ex9) { Log.Error(ex9.ToString()); } GameComponentUtility.GameComponentTick(); try { Find.LetterStack.LetterStackTick(); } catch (Exception ex10) { Log.Error(ex10.ToString()); } try { Find.Autosaver.AutosaverTick(); } catch (Exception ex11) { Log.Error(ex11.ToString()); } Debug.developerConsoleVisible = false; }