Elin Decompiled Documentation EA 23.153 Nightly
Loading...
Searching...
No Matches
Game.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Runtime.Serialization;
4using Newtonsoft.Json;
5using UnityEngine;
6
7public class Game : EClass
8{
9 public class Config : EClass
10 {
11 [JsonProperty]
12 public bool showRoof;
13
14 [JsonProperty]
15 public bool showWall;
16
17 [JsonProperty]
18 public bool tilt;
19
20 [JsonProperty]
21 public bool tiltRegion;
22
23 [JsonProperty]
24 public bool slope;
25
26 [JsonProperty]
27 public bool noRoof;
28
29 [JsonProperty]
30 public bool freePos;
31
32 [JsonProperty]
33 public bool snapFreePos;
34
35 [JsonProperty]
36 public bool buildLight;
37
38 [JsonProperty]
39 public bool highlightArea;
40
41 [JsonProperty]
42 public bool autoWall;
43
44 [JsonProperty]
45 public bool showGuideGrid;
46
47 [JsonProperty]
48 public bool reverseSnow;
49
50 [JsonProperty]
51 public bool autoCollectCard;
52
53 [JsonProperty]
54 public bool cheat;
55
56 [JsonProperty]
57 public bool showAllFeat;
58
59 [JsonProperty]
60 public int slopeMod = 50;
61
62 [JsonProperty]
63 public int defaultZoom = 100;
64
65 [JsonProperty]
66 public int zoomedZoom = 125;
67
68 [JsonProperty]
69 public int regionZoom = 100;
70
71 [JsonProperty]
72 public int tiltPower = 80;
73
74 [JsonProperty]
75 public int tiltPowerRegion = 50;
76
77 [JsonProperty]
78 public int gridIconSize = 100;
79
80 [JsonProperty]
81 public int backDrawAlpha = 10;
82
83 [JsonProperty]
84 public int animeSpeed = 100;
85
86 [JsonProperty]
87 public int lowWallObjAltitude = 2;
88
89 [JsonProperty]
91
92 [JsonProperty]
94
95 [JsonProperty]
97
98 public bool FreePos
99 {
100 get
101 {
102 if (!Input.GetKey(KeyCode.LeftShift))
103 {
104 return Input.GetKey(KeyCode.RightShift);
105 }
106 return true;
107 }
108 }
109 }
110
111 public class Flags : EClass
112 {
113 [JsonProperty]
114 public int _b1;
115
117
119 {
120 get
121 {
122 return b1[0];
123 }
124 set
125 {
126 b1[0] = value;
127 }
128 }
129
131 private void OnSerializing(StreamingContext context)
132 {
133 _b1 = (int)b1.Bits;
134 }
135
136 [OnDeserialized]
137 private void _OnDeserialized(StreamingContext context)
138 {
139 b1.Bits = (uint)_b1;
140 }
141 }
142
143 public static Game Instance;
144
145 public static float waitTimer;
146
147 public static string id;
148
149 public static bool isPaused;
150
151 [JsonProperty(Order = -90)]
153
154 [JsonProperty(Order = -80)]
156
157 [JsonProperty(Order = -100)]
159
160 [JsonProperty(Order = -60)]
162
163 [JsonProperty(Order = -50)]
165
166 [JsonProperty]
168
169 [JsonProperty]
171
172 [JsonProperty]
173 public new World world;
174
175 [JsonProperty]
176 public new Player player = new Player();
177
178 [JsonProperty]
180
181 [JsonProperty]
183
184 [JsonProperty]
185 public MsgLog log = new MsgLog
186 {
187 id = "log"
188 };
189
190 [JsonProperty]
191 public PCCUniformManager uniforms = new PCCUniformManager();
192
193 [JsonProperty]
195
196 [JsonProperty]
197 public int seed;
198
199 [JsonProperty]
200 public int idPrologue;
201
202 [JsonProperty]
203 public int idDifficulty;
204
205 [JsonProperty]
206 public int dateScratch;
207
208 [JsonProperty]
209 public double backupTime;
210
211 [JsonProperty]
212 public Flags flags = new Flags();
213
214 [JsonProperty]
215 public Config config = new Config();
216
217 [JsonProperty]
218 public List<Thing> lostThings = new List<Thing>();
219
220 [JsonProperty]
222
223 public int gameSpeedIndex = 1;
224
225 public int lastGameSpeedIndex = 1;
226
227 public int sessionMin;
228
229 public int countLoadedMaps;
230
231 public int saveCount;
232
233 public float timeSinceStart;
234
235 public bool isLoading;
236
237 public bool isKilling;
238
239 public bool isCloud;
240
242
244
246
248
249 public Dictionary<string, IGlobalValue> referenceMap = new Dictionary<string, IGlobalValue>();
250
251 public HashSet<Texture2D> loadedTextures = new HashSet<Texture2D>();
252
253 private float welcomeTimer;
254
255 public static bool IsWaiting => waitTimer > 0f;
256
258
260
262
264
266
268
270
271 public new static void Wait(float a, Point p)
272 {
273 _ = p?.IsSync;
274 }
275
276 public new static void Wait(float a, Card c)
277 {
278 if (c != null && c.isSynced && !c.IsPC)
279 {
280 Wait(a);
281 }
282 }
283
284 public static void Wait(float a)
285 {
286 waitTimer = a * (float)(EClass.core.config.game.waiter * 25) / 100f;
287 }
288
289 public void OnUpdate()
290 {
291 backupTime += Time.deltaTime;
292 waitTimer -= Time.deltaTime;
293 timeSinceStart += Time.deltaTime;
294 player.stats.timeElapsed += Time.deltaTime;
296 {
297 flags.IsWelcomeMessageShown = true;
298 }
300 }
301
302 public static bool TryLoad(string id, bool cloud, Action onLoad)
303 {
305 {
306 onLoad();
307 return true;
308 }
309 EClass.ui.Say("incompatible");
310 return false;
311 }
312
313 public static void Load(string id, bool cloud)
314 {
315 string text = (cloud ? CorePath.RootSaveCloud : CorePath.RootSave) + id;
316 Debug.Log("Loading: " + id + ": " + text);
317 if (EClass.game != null)
318 {
319 EClass.game.Kill();
320 }
322 EClass.core.game = GameIO.LoadGame(id, text, cloud);
323 EClass.game.isCloud = cloud;
324 EClass.game.isLoading = true;
328 EClass.scene.Init(Scene.Mode.StartGame);
329 if (EClass.game.altInv)
330 {
331 SoundManager.ignoreSounds = true;
333 {
334 EClass.ui.OpenFloatInv();
335 }
336 SoundManager.ignoreSounds = true;
338 {
339 EClass.ui.ToggleAbility();
340 }
341 SoundManager.ignoreSounds = false;
342 TooltipManager.Instance.HideTooltips(immediate: true);
343 }
344 if ((bool)WidgetSideScreen.Instance)
345 {
347 }
348 EClass.game.isLoading = false;
349 }
350
351 public void OnLoad()
352 {
353 domains.OnLoad();
356 world._OnLoad();
357 player.OnLoad();
359 {
360 EClass.pc.party.members.ForEach(delegate(Chara c)
361 {
362 c.currentZone = EClass.pc.homeZone;
363 c.global.transition = new ZoneTransition
364 {
365 state = ZoneTransition.EnterState.Return
366 };
367 });
368 }
369 player.zone = EClass.pc.currentZone;
370 EClass.pc.currentZone.lastActive = world.date.GetRaw();
371 if (spatials.Find("somewhere") == null)
372 {
373 SpatialGen.Create("somewhere", world.region, register: true);
374 }
375 EClass.pc.homeZone.isKnown = true;
378 foreach (Thing item in EClass.pc.things.List((Thing t) => t.Num <= 0 || t.isDestroyed))
379 {
380 item.parent.RemoveCard(item);
381 }
382 foreach (Thing item2 in EClass.pc.things.List((Thing t) => t.trait is TraitChestMerchant))
383 {
384 item2.Destroy();
385 }
386 foreach (Thing item3 in EClass.pc.things.List((Thing t) => t.invY == 1 && t.invX == -1))
387 {
388 item3.invY = 0;
389 }
390 foreach (Chara value in EClass.game.cards.globalCharas.Values)
391 {
392 if (value.id == "demitas" && value.faction.id == "wilds")
393 {
395 }
396 if (value.memberType == FactionMemberType.Livestock && !value.IsPCFaction)
397 {
398 value.memberType = FactionMemberType.Default;
399 }
400 if (!value.isDyed && value.HasTag(CTAG.random_color))
401 {
402 value.DyeRandom();
403 }
404 }
405 foreach (FactionBranch child in EClass.pc.faction.GetChildren())
406 {
407 foreach (Chara member in child.members)
408 {
409 if (!member.isDead && (member.currentZone == null || member.currentZone.id == "somewhere"))
410 {
411 Debug.Log("exception: Moving invalid chara: " + member.Name + "/" + member.currentZone?.ToString() + "/" + member.homeBranch?.ToString() + "/" + member.faction);
412 member.MoveZone(child.owner, ZoneTransition.EnterState.RandomVisit);
413 }
414 member.RefreshWorkElements(child.owner.elements);
415 member.Refresh();
416 }
417 }
418 EClass.pc.angle = player.angle;
420 if (cards.listAdv.Count == 0)
421 {
423 }
424 quests.list.ForeachReverse(delegate(Quest q)
425 {
426 if (!(q is QuestRandom))
427 {
428 foreach (Quest item4 in quests.list)
429 {
430 if (q != item4 && item4.id == q.id)
431 {
432 quests.list.Remove(item4);
433 break;
434 }
435 }
436 }
437 });
438 quests.globalList.ForeachReverse(delegate(Quest q)
439 {
440 if (!(q is QuestRandom))
441 {
442 foreach (Quest global in quests.globalList)
443 {
444 if (q != global && global.id == q.id)
445 {
446 quests.globalList.Remove(global);
447 break;
448 }
449 }
450 }
451 });
452 TryAddQuest("into_darkness", "exile_kettle");
453 if (version.IsBelow(0, 23, 100))
454 {
455 int num = player.recipes.knownRecipes.TryGetValue("trainingDummy_heavy", 0);
456 if (num != 0)
457 {
458 player.recipes.knownRecipes["trainingDummy_heavy1"] = num;
459 }
460 }
461 if (version.IsBelow(0, 23, 96))
462 {
463 EClass.game.principal = IO.DeepCopy(EClass.setting.start.principals[0]);
464 player.resetPrincipal = true;
465 }
466 if (player.resetPrincipal)
467 {
468 GameDifficultySetting gameDifficultySetting = EClass.setting.start.difficulties[idDifficulty];
469 EClass.game.principal.id = -1;
470 EClass.game.principal.permadeath = gameDifficultySetting.deleteGameOnDeath;
471 EClass.game.principal.disableManualSave = !gameDifficultySetting.allowManualSave;
472 EClass.core.actionsNextFrame.Add(delegate
473 {
474 EClass.ui.AddLayer<LayerWorldSetting>();
475 });
476 }
477 if (version.IsBelow(0, 23, 93))
478 {
480 Debug.Log("â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– feafefaeffaeaffeaaeaefseasfaefaef");
481 while (TryAddRecipe())
482 {
483 }
484 }
485 if (version.IsBelow(0, 23, 72))
486 {
487 foreach (Chara value2 in EClass.game.cards.globalCharas.Values)
488 {
489 if (!value2.isDead)
490 {
491 value2.c_wasInPcParty = false;
492 }
493 }
494 }
495 if (version.IsBelow(0, 23, 59))
496 {
497 while (TryDestroy())
498 {
499 }
500 }
501 if (version.IsBelow(0, 23, 52))
502 {
503 player.flags.toggleHotbarHighlightActivated = true;
504 }
505 if (version.IsBelow(0, 23, 51))
506 {
507 foreach (Chara value3 in EClass.game.cards.globalCharas.Values)
508 {
509 if (!(value3.id != "adv") && value3.IsPCFaction)
510 {
511 value3.idSkin = value3.uid % (value3.source._tiles.Length - 4) / 2 * 2 + ((!value3.IsMale) ? 1 : 0);
512 }
513 }
514 }
515 if (version.IsBelow(0, 22, 91))
516 {
517 TryAddQuestIfActive("demitas_spellwriter", "into_darkness");
518 }
519 if (version.IsBelow(0, 22, 86))
520 {
521 Chara chara = cards.globalCharas.Find("demitas");
522 if (chara != null && chara._works != null && chara._works.Count > 0)
523 {
524 chara._works[0] = 51;
525 }
526 }
527 if (version.IsBelow(0, 22, 86))
528 {
529 TryAddQuest("farris_tulip", "greatDebt");
530 }
531 if (version.IsBelow(0, 22, 86))
532 {
533 TryAddQuest("exile_whisper", "exile_kettle");
534 }
535 if (version.IsBelow(0, 22, 85))
536 {
537 TryAddQuest("exile_meet", "pre_debt");
538 }
539 if (version.IsBelow(0, 22, 60) && EClass.game.quests.Get<QuestDebt>() != null)
540 {
541 Chara chara2 = cards.globalCharas.Find("loytel");
542 Debug.Log("Loytelfix: " + chara2.homeZone);
543 if (chara2.homeZone == null || !chara2.homeZone.IsPCFaction)
544 {
546 chara2.homeZone = EClass.pc.homeBranch.owner;
547 chara2.RemoveEditorTag(EditorTag.Invulnerable);
548 }
549 }
550 if (version.IsBelow(0, 22, 52) && quests.completedIDs.Contains("vernis_gold"))
551 {
552 quests.Add("pre_debt", "farris");
553 }
554 if (quests.completedIDs.Contains("farris_tulip"))
555 {
556 quests.globalList.ForeachReverse(delegate(Quest q)
557 {
558 if (q.id == "farris_tulip")
559 {
560 quests.globalList.Remove(q);
561 }
562 });
563 }
564 quests.list.ForeachReverse(delegate(Quest q)
565 {
566 if (q is QuestDialog && quests.completedIDs.Contains(q.id))
567 {
568 quests.list.Remove(q);
569 }
570 });
571 if (version.IsBelow(0, 22, 20))
572 {
573 foreach (Chara value4 in cards.globalCharas.Values)
574 {
575 value4.SetBool(18, enable: false);
576 }
577 }
578 if (version.IsBelow(0, 22, 22))
579 {
580 if (EClass.pc.faithElements != null)
581 {
583 }
584 foreach (Element item5 in EClass.pc.elements.ListElements((Element e) => e.source.categorySub == "god"))
585 {
586 EClass.pc.SetFeat(item5.id, 0);
587 }
589 }
590 if (version.IsBelow(0, 22, 45))
591 {
592 player.debt = 20000000;
593 }
594 if (!version.Equals(EClass.core.version))
595 {
596 player.recipes.OnVersionUpdate();
597 }
598 if (cards.container_deposit == null)
599 {
600 cards.container_deposit = ThingGen.Create("container_deposit");
601 if (player.bankMoney > 0)
602 {
603 cards.container_deposit.Add("money", player.bankMoney);
604 }
605 }
606 foreach (Quest item6 in quests.list)
607 {
608 if (item6 is QuestSequence && !EClass.sources.quests.map.ContainsKey(item6.idSource))
609 {
610 item6.phase = 0;
611 }
612 }
613 foreach (Quest global2 in quests.globalList)
614 {
615 if (global2 is QuestSequence && !EClass.sources.quests.map.ContainsKey(global2.idSource))
616 {
617 global2.phase = 0;
618 }
619 }
620 void TryAddQuest(string idQuest, string idReqQuest)
621 {
622 if (quests.completedIDs.Contains(idReqQuest) && !quests.completedIDs.Contains(idQuest) && quests.GetGlobal(idQuest) == null && quests.Get(idQuest) == null)
623 {
624 quests.Add(idQuest);
625 }
626 }
627 void TryAddQuestIfActive(string idQuest, string idReqQuest)
628 {
629 if (quests.Get(idReqQuest) != null && !quests.completedIDs.Contains(idQuest) && quests.GetGlobal(idQuest) == null && quests.Get(idQuest) == null)
630 {
631 quests.Add(idQuest);
632 }
633 }
634 bool TryAddRecipe()
635 {
636 foreach (string key in player.recipes.knownRecipes.Keys)
637 {
638 if (key.Length > 1 && key[0] == 'b')
639 {
640 RecipeSource recipeSource = RecipeManager.Get(key + "-p");
641 if (recipeSource != null && !player.recipes.knownRecipes.ContainsKey(recipeSource.id))
642 {
643 Debug.Log(recipeSource.id);
644 player.recipes.Add(recipeSource.id, showEffect: false);
645 return true;
646 }
647 recipeSource = RecipeManager.Get(key.Replace("-p", ""));
648 if (recipeSource != null && !player.recipes.knownRecipes.ContainsKey(recipeSource.id))
649 {
650 Debug.Log(recipeSource.id);
651 player.recipes.Add(recipeSource.id, showEffect: false);
652 return true;
653 }
654 }
655 }
656 return false;
657 }
658 static bool TryDestroy()
659 {
660 for (int i = 0; i < EClass.pc.party.members.Count; i++)
661 {
662 Chara chara3 = EClass.pc.party.members[i];
663 Debug.Log(chara3.id + "/" + chara3.uid + "/" + chara3._cints[1]);
664 for (int j = 0; j < EClass.pc.party.members.Count; j++)
665 {
666 Chara chara4 = EClass.pc.party.members[j];
667 if (i != j && chara3.uid == chara4.uid)
668 {
669 EClass.pc.party.uidMembers.RemoveAt(j);
670 EClass.pc.party.members.RemoveAt(j);
671 chara4.Destroy();
672 Debug.Log("Destroyed");
673 return true;
674 }
675 }
676 }
677 return false;
678 }
679 }
680
681 public static void Create(string _id = null, bool cloud = false)
682 {
683 id = _id ?? GameIO.GetNewId(cloud ? CorePath.RootSaveCloud : CorePath.RootSave, "world_");
684 OnBeforeInstantiate();
685 EClass.core.game = (Instance = new Game());
686 EClass.core.game.isCloud = cloud;
690 }
691
692 public static void OnBeforeInstantiate()
693 {
694 Player.seedHallucination = 0;
695 }
696
697 public void OnGameInstantiated()
698 {
699 HotItemHeld.taskBuild = null;
700 InvOwner.Trader = (InvOwner.Main = null);
701 LayerDrama.currentQuest = null;
702 BookList.Init();
703 ContentGallery.lastPage = 0;
704 ContentGallery.listMode = false;
705 if (!Application.isEditor || !EClass.debug.enable)
706 {
708 }
709 foreach (Chara value in cards.globalCharas.Values)
710 {
711 if (value.uid == player.uidChara)
712 {
713 player.chara = value;
714 break;
715 }
716 }
718 EClass.ui.widgets.OnGameInstantiated();
719 EClass.Sound.ResetPlaylist();
720 EClass.core.config.ApplyFPS(force: true);
721 }
722
723 public void _Create()
724 {
725 principal = IO.DeepCopy(EClass.setting.start.principals[0]);
726 idDifficulty = 1;
727 config.snapFreePos = (config.slope = (config.autoWall = true));
728 config.autoCombat.abortOnAllyDead = true;
729 config.autoCombat.abortOnHalfHP = true;
730 config.autoCombat.bUseHotBar = true;
731 config.autoCombat.bUseInventory = true;
732 config.autoCombat.bDontChangeTarget = true;
733 config.autoCombat.abortOnKill = true;
734 config.autoCombat.abortOnItemLoss = true;
735 seed = EClass.rnd(10000);
736 Debug.Log("creating game: " + id + " seed:" + seed);
737 uniforms.Import();
738 religions.OnCreateGame();
739 factions.OnCreateGame();
741 domains.OnCreateGame();
742 foreach (Spatial value in spatials.map.Values)
743 {
744 value.SetMainFaction(factions.Find(value.source.faction.IsEmpty("wilds")));
745 }
746 player.OnCreateGame();
747 cards.container_shipping = ThingGen.Create("container_shipping");
748 cards.container_deliver = ThingGen.Create("container_delivery");
749 cards.container_deposit = ThingGen.Create("container_deposit");
750 bp = new GameBlueprint();
751 bp.Create();
752 }
753
754 public void StartNewGame()
755 {
756 EClass.pc.homeZone = StartZone;
758 parties.Create(EClass.pc);
759 Prologue prologue = EClass.game.Prologue;
760 CharaGen.Create("fiama").SetGlobal(EClass.game.StartZone, prologue.posFiama.x, prologue.posFiama.y);
761 CharaGen.Create("ashland").SetGlobal(EClass.game.StartZone, prologue.posAsh.x, prologue.posAsh.y);
762 if ((bool)LayerTitle.actor)
763 {
764 world.date.hour = EClass.game.Prologue.hour;
766 Player obj = player;
767 Chara chara = EClass.pc;
768 Zone zone2 = (EClass.pc.homeZone = EClass.game.spatials.Find(EClass.game.Prologue.idStartZone));
769 Zone zone4 = (chara.currentZone = zone2);
770 obj.zone = zone4;
771 EClass.pc.global.transition = new ZoneTransition
772 {
773 state = ZoneTransition.EnterState.Exact,
775 z = EClass.game.Prologue.startZ
776 };
777 EClass.pc.hp = EClass.pc.MaxHP;
780 EClass.pc.AddCondition<ConFaint>(200, force: true);
781 }
782 else
783 {
784 EClass.pc.homeZone = EClass.game.spatials.Find(EClass.game.Prologue.idStartZone);
785 Zone zone5 = null;
786 ZoneTransition transition = new ZoneTransition
787 {
788 state = ZoneTransition.EnterState.Auto
789 };
790 Chara c = EClass.game.cards.globalCharas.Find("ashland");
791 switch (EClass.debug.startScene)
792 {
793 case CoreDebug.StartScene.Zone:
795 transition = new ZoneTransition
796 {
797 state = ZoneTransition.EnterState.Exact,
799 z = EClass.game.Prologue.startZ
800 };
801 break;
802 case CoreDebug.StartScene.Home:
803 case CoreDebug.StartScene.Story_Test:
805 transition = new ZoneTransition
806 {
807 state = ZoneTransition.EnterState.Exact,
809 z = EClass.game.Prologue.startZ
810 };
811 break;
812 case CoreDebug.StartScene.Home_Cave:
813 EClass.game.idPrologue = 2;
815 transition = new ZoneTransition
816 {
817 state = ZoneTransition.EnterState.Exact,
819 z = EClass.game.Prologue.startZ
820 };
821 break;
822 case CoreDebug.StartScene.MeetFarris:
823 {
824 Zone parent4 = EClass.game.spatials.Find("nymelle");
825 zone5 = SpatialGen.Create("nymelle", parent4, register: true) as Zone;
826 zone5.lv = -2;
827 EClass.game.quests.Start("exploration", c, assignQuest: false);
828 break;
829 }
830 case CoreDebug.StartScene.NymelleBoss:
831 {
832 Zone parent3 = EClass.game.spatials.Find("nymelle");
833 zone5 = SpatialGen.Create("nymelle_boss", parent3, register: true) as Zone;
834 zone5.lv = -5;
835 EClass.game.quests.Start("exploration", c, assignQuest: false).ChangePhase(2);
836 break;
837 }
838 case CoreDebug.StartScene.AfterNymelle:
840 transition = new ZoneTransition
841 {
842 state = ZoneTransition.EnterState.Exact,
844 z = EClass.game.Prologue.startZ
845 };
846 EClass.game.quests.Start("exploration", c, assignQuest: false).ChangePhase(5);
847 EClass.game.quests.globalList.Add(Quest.Create("sharedContainer").SetClient(c, assignQuest: false));
848 EClass.game.quests.globalList.Add(Quest.Create("crafter").SetClient(c, assignQuest: false));
849 EClass.game.quests.globalList.Add(Quest.Create("defense").SetClient(c, assignQuest: false));
850 break;
851 case CoreDebug.StartScene.Melilith:
852 {
853 Zone parent2 = EClass.game.spatials.Find("cursed_manor");
854 zone5 = SpatialGen.Create("cursed_manor_dungeon", parent2, register: true) as Zone;
855 zone5.lv = -5;
856 break;
857 }
858 case CoreDebug.StartScene.Tefra:
859 {
860 Zone parent = EClass.game.spatials.Find("vernis");
861 zone5 = SpatialGen.Create("vernis_mine", parent, register: true) as Zone;
862 zone5.lv = -7;
863 break;
864 }
865 }
866 if (zone5 != null)
867 {
868 Player obj2 = player;
869 Chara chara2 = EClass.pc;
870 Zone zone2 = (EClass.pc.homeZone = zone5);
871 Zone zone4 = (chara2.currentZone = zone2);
872 obj2.zone = zone4;
873 EClass.pc.global.transition = transition;
874 }
875 else
876 {
877 Player obj3 = player;
878 Zone zone4 = (EClass.pc.currentZone = EClass.game.spatials.Find(EClass.debug.startZone));
879 obj3.zone = zone4;
880 EClass.pc.global.transition = new ZoneTransition
881 {
882 state = ZoneTransition.EnterState.Return
883 };
884 }
885 }
886 EClass.pc.homeZone.isKnown = true;
887 AddAdventurers();
888 player.OnStartNewGame();
889 EClass.scene.Init(Scene.Mode.StartGame);
890 }
891
892 public void AddAdventurers()
893 {
894 List<Zone> source = world.region.ListTowns();
895 string[] array = new string[6] { "adv_kiria", "adv_gaki", "adv_wini", "adv_verna", "adv_ivory", "adv_mesherada" };
896 for (int i = 0; i < EClass.setting.balance.numAdv; i++)
897 {
898 Zone zone = source.RandomItem();
899 if (zone is Zone_SubTown && EClass.rnd(5) != 0)
900 {
901 i--;
902 continue;
903 }
904 if (i >= array.Length && i < array.Length + 2)
905 {
907 }
908 Chara chara = CharaGen.Create((i < array.Length) ? array[i] : ((EClass.rnd(10) == 0) ? "adv_fairy" : "adv"));
909 chara.SetHomeZone(zone);
910 chara.global.transition = new ZoneTransition
911 {
912 state = ZoneTransition.EnterState.RandomVisit
913 };
914 zone.AddCard(chara);
915 cards.listAdv.Add(chara);
916 }
917 }
918
919 public void GotoTitle(bool showDialog = true)
920 {
921 if (showDialog)
922 {
923 Dialog.YesNo("dialog_gotoTitle", delegate
924 {
925 if (EClass.game.Save(isAutoSave: true))
926 {
927 EClass.scene.Init(Scene.Mode.Title);
928 }
929 });
930 }
931 else
932 {
933 EClass.scene.Init(Scene.Mode.Title);
934 }
935 }
936
937 public void Quit()
938 {
939 Dialog.YesNo("dialog_quit", delegate
940 {
941 if (EClass.game.Save())
942 {
943 EClass.core.Quit();
944 }
945 });
946 }
947
948 public bool Save(bool isAutoSave = false, bool silent = false)
949 {
950 if (EClass.ui.IsDragging)
951 {
952 EClass.ui.EndDrag(canceled: true);
953 }
954 if (isAutoSave && EClass.debug.ignoreAutoSave)
955 {
956 return true;
957 }
958 bool flag = EClass.core.config.game.autoBackup && backupTime >= (double)(EClass.core.config.game.backupInterval * 60 * 30);
959 if (flag)
960 {
961 backupTime = 0.0;
962 }
964 countLoadedMaps = 0;
965 player.pref.layerInventory = EClass.ui.layerFloat.GetLayer<LayerInventory>();
966 if (player.pref.layerInventory)
967 {
968 player.pref.layerAbility = EClass.ui.layerFloat.GetLayer<LayerAbility>();
969 }
970 player.pref.layerCraft = EClass.ui.layerFloat.GetLayer<LayerCraftFloat>();
971 player.angle = EClass.pc.angle;
972 version = EClass.core.version;
973 EClass.ui.widgets.UpdateConfigs();
974 GameIndex gameIndex = null;
975 try
976 {
977 OnBeforeSave();
978 gameIndex = GameIO.SaveGame();
979 }
980 catch (Exception ex)
981 {
982 EClass.ui.Say(ex.Message);
983 SE.Beep();
984 Msg.Say("error_save");
985 return false;
986 }
987 if (flag)
988 {
989 GameIO.MakeBackup(gameIndex);
990 EClass.ui.Say("backupDone");
991 }
992 if (!silent)
993 {
994 if (!isAutoSave)
995 {
996 SE.WriteJournal();
997 }
998 Msg.Say("saved");
999 }
1000 saveCount++;
1001 return true;
1002 }
1003
1004 public void OnBeforeSave()
1005 {
1006 foreach (Zone zone in spatials.Zones)
1007 {
1008 zone.OnBeforeSave();
1009 }
1010 player.OnBeforeSave();
1011 foreach (Spatial item in spatials.listDestryoed)
1012 {
1013 item.DeleteMapRecursive();
1014 }
1015 spatials.listDestryoed.Clear();
1016 }
1017
1018 public void Kill()
1019 {
1020 isKilling = true;
1021 Debug.Log("Killing Game: IsStarted? " + EClass.core.IsGameStarted);
1023 {
1024 EClass.ui.OnKillGame();
1026 activeZone.OnKillGame();
1027 }
1028 EClass.core.game = (Instance = null);
1029 EClass.Sound.currentPlaylist = null;
1030 Window.dictTab.Clear();
1031 foreach (Texture2D loadedTexture in loadedTextures)
1032 {
1033 if (loadedTexture != null)
1034 {
1035 UnityEngine.Object.Destroy(loadedTexture);
1036 }
1037 }
1038 }
1039
1040 public void Pause(Action onUnpause = null)
1041 {
1042 isPaused = true;
1043 LayerPause layerPause = EClass.ui.AddLayer<LayerPause>();
1044 Game lastGame = EClass.game;
1045 if (onUnpause == null)
1046 {
1047 return;
1048 }
1049 layerPause.SetOnKill(delegate
1050 {
1051 if (EClass.core.IsGameStarted && lastGame == EClass.game)
1052 {
1053 onUnpause();
1054 }
1055 });
1056 }
1057
1058 [OnSerializing]
1059 private void OnSerializing(StreamingContext context)
1060 {
1061 Debug.Log("#io game OnSerializing");
1062 }
1063
1064 [OnDeserializing]
1065 private void OnDeserializing(StreamingContext context)
1066 {
1067 Debug.Log("#io game OnDeserializing");
1068 Instance = this;
1069 }
1070}
CTAG
Definition: CTAG.cs:2
@ seed
EditorTag
Definition: EditorTag.cs:2
FactionMemberType
static void OnGameInstantiated()
Definition: ActionMode.cs:247
void SetBool(int id, bool enable)
Definition: BaseCard.cs:20
List< Action > actionsNextFrame
Definition: BaseCore.cs:31
Version version
Definition: BaseCore.cs:17
static void Init()
Definition: BookList.cs:20
static void Set(CardBlueprint _bp)
static CardBlueprint Chara(int lv, Rarity rarity=Rarity.Normal)
Chara Find(string id)
Definition: CardManager.cs:20
List< Chara > listAdv
Definition: CardManager.cs:64
GlobalCharaList globalCharas
Definition: CardManager.cs:46
Thing container_deposit
Definition: CardManager.cs:58
Definition: Card.cs:11
float angle
Definition: Card.cs:67
bool isDestroyed
Definition: Card.cs:71
void RemoveEditorTag(EditorTag tag)
Definition: Card.cs:2546
ElementContainerCard elements
Definition: Card.cs:37
string id
Definition: Card.cs:31
int invY
Definition: Card.cs:1891
bool IsMale
Definition: Card.cs:2320
string Name
Definition: Card.cs:2073
bool HasTag(CTAG tag)
Definition: Card.cs:2531
void DyeRandom()
Definition: Card.cs:5627
int uid
Definition: Card.cs:118
Trait trait
Definition: Card.cs:49
bool isDyed
Definition: Card.cs:442
void Destroy()
Definition: Card.cs:4783
ThingContainer things
Definition: Card.cs:34
virtual bool IsPC
Definition: Card.cs:2079
int invX
Definition: Card.cs:1879
Thing Add(string id, int num=1, int lv=1)
Definition: Card.cs:2997
int Num
Definition: Card.cs:154
virtual bool isSynced
Definition: Card.cs:2023
static Chara Create(string id, int lv=-1)
Definition: CharaGen.cs:17
Definition: Chara.cs:10
void Refresh(bool calledRecursive=false)
Definition: Chara.cs:1558
void SetHomeZone(Zone zone)
Definition: Chara.cs:1278
int[] _cints
Definition: Chara.cs:82
void RefreshWorkElements(ElementContainer parent=null)
Definition: Chara.cs:8319
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:8559
Faction faction
Definition: Chara.cs:423
void SetFeat(int id, int value=1, bool msg=false)
Definition: Chara.cs:9114
Party party
Definition: Chara.cs:43
Chara SetGlobal(Zone _home, int x, int z)
Definition: Chara.cs:1314
override bool IsPCFaction
Definition: Chara.cs:667
override int MaxHP
Definition: Chara.cs:704
Zone currentZone
Definition: Chara.cs:251
Stats mana
Definition: Chara.cs:1006
FactionMemberType memberType
Definition: Chara.cs:46
Stats stamina
Definition: Chara.cs:998
Zone homeZone
Definition: Chara.cs:263
void RefreshFaithElement()
Definition: Chara.cs:9408
ElementContainer faithElements
Definition: Chara.cs:38
FactionBranch homeBranch
Definition: Chara.cs:932
bool isDead
Definition: Chara.cs:385
List< int > _works
Definition: Chara.cs:52
void MoveZone(string alias)
Definition: Chara.cs:3094
new GameConfig game
Definition: CoreConfig.cs:600
void ApplyFPS(bool force=false)
Definition: CoreConfig.cs:832
void TryUpdatePlayedHour()
Definition: CoreConfig.cs:806
string startZone
Definition: CoreDebug.cs:105
bool enable
Definition: CoreDebug.cs:285
void OnLoad()
Definition: CoreDebug.cs:690
bool ignoreAutoSave
Definition: CoreDebug.cs:125
StartScene startScene
Definition: CoreDebug.cs:95
static string RootSave
Definition: CorePath.cs:206
static string RootSaveCloud
Definition: CorePath.cs:208
Game game
Definition: Core.cs:72
bool IsGameStarted
Definition: Core.cs:84
CoreConfig config
Definition: Core.cs:70
int GetRaw(int offsetHours=0)
Definition: Date.cs:322
Definition: Dialog.cs:7
static Dialog YesNo(string langDetail, Action actionYes, Action actionNo=null, string langYes="yes", string langNo="no")
Definition: Dialog.cs:244
void OnCreateGame()
Definition: DomainManager.cs:7
Definition: EClass.cs:5
static Game game
Definition: EClass.cs:8
static Scene scene
Definition: EClass.cs:30
static int rnd(int a)
Definition: EClass.cs:58
static Core core
Definition: EClass.cs:6
static SourceManager sources
Definition: EClass.cs:42
static Chara pc
Definition: EClass.cs:14
static CoreDebug debug
Definition: EClass.cs:48
static SoundManager Sound
Definition: EClass.cs:46
static UI ui
Definition: EClass.cs:16
static GameSetting setting
Definition: EClass.cs:34
List< Element > ListElements(Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)
void SetParent(Card c)
int id
Definition: ELEMENT.cs:248
SourceElement.Row source
Definition: ELEMENT.cs:271
List< Chara > members
void AddMemeber(Chara c)
Faction Find(string id)
List< FactionBranch > GetChildren()
Definition: FACTION.cs:202
string id
Definition: FACTION.cs:129
Definition: GameIO.cs:10
static string GetNewId(string path, string prefix="", int start=1)
Definition: GameIO.cs:352
static bool CanLoad(string root)
Definition: GameIO.cs:144
static GameIndex SaveGame()
Definition: GameIO.cs:79
static void ClearTemp()
Definition: GameIO.cs:61
static Game LoadGame(string id, string root, bool cloud)
Definition: GameIO.cs:150
static void ResetTemp()
Definition: GameIO.cs:51
static void MakeBackup(GameIndex index, string suffix="")
Definition: GameIO.cs:112
List< GameDifficultySetting > difficulties
Definition: GameSetting.cs:242
List< GamePrincipal > principals
Definition: GameSetting.cs:244
List< Prologue > prologues
Definition: GameSetting.cs:240
StartSetting start
Definition: GameSetting.cs:305
BalanceSetting balance
Definition: GameSetting.cs:309
void FixedUpdate()
Definition: GameUpdater.cs:436
int slopeMod
Definition: Game.cs:60
bool tilt
Definition: Game.cs:18
bool buildLight
Definition: Game.cs:36
int animeSpeed
Definition: Game.cs:84
bool showRoof
Definition: Game.cs:12
bool showWall
Definition: Game.cs:15
int regionZoom
Definition: Game.cs:69
bool autoCollectCard
Definition: Game.cs:51
ConfigPreference preference
Definition: Game.cs:96
bool noRoof
Definition: Game.cs:27
int defaultZoom
Definition: Game.cs:63
bool showGuideGrid
Definition: Game.cs:45
int lowWallObjAltitude
Definition: Game.cs:87
bool highlightArea
Definition: Game.cs:39
int zoomedZoom
Definition: Game.cs:66
int tiltPower
Definition: Game.cs:72
int backDrawAlpha
Definition: Game.cs:81
int tiltPowerRegion
Definition: Game.cs:75
bool showAllFeat
Definition: Game.cs:57
bool snapFreePos
Definition: Game.cs:33
int gridIconSize
Definition: Game.cs:78
bool cheat
Definition: Game.cs:54
bool reverseSnow
Definition: Game.cs:48
bool tiltRegion
Definition: Game.cs:21
bool slope
Definition: Game.cs:24
bool FreePos
Definition: Game.cs:99
bool autoWall
Definition: Game.cs:42
ConfigTactics tactics
Definition: Game.cs:90
bool freePos
Definition: Game.cs:30
ConfigAutoCombat autoCombat
Definition: Game.cs:93
bool IsWelcomeMessageShown
Definition: Game.cs:119
BitArray32 b1
Definition: Game.cs:116
void OnSerializing(StreamingContext context)
Definition: Game.cs:131
void _OnDeserialized(StreamingContext context)
Definition: Game.cs:137
int _b1
Definition: Game.cs:114
Definition: Game.cs:8
void OnSerializing(StreamingContext context)
Definition: Game.cs:1059
void _Create()
Definition: Game.cs:723
bool altAbility
Definition: Game.cs:267
static bool isPaused
Definition: Game.cs:149
HashSet< Texture2D > loadedTextures
Definition: Game.cs:251
int sessionMin
Definition: Game.cs:227
List< Thing > lostThings
Definition: Game.cs:218
bool UseGrid
Definition: Game.cs:259
bool altUI
Definition: Game.cs:261
Dictionary< string, IGlobalValue > referenceMap
Definition: Game.cs:249
bool isLoading
Definition: Game.cs:235
static bool IsWaiting
Definition: Game.cs:255
GameBlueprint bp
Definition: Game.cs:241
static void OnBeforeInstantiate()
Definition: Game.cs:692
new Player player
Definition: Game.cs:176
PartyManager parties
Definition: Game.cs:170
ReligionManager religions
Definition: Game.cs:158
float welcomeTimer
Definition: Game.cs:253
int countLoadedMaps
Definition: Game.cs:229
static void Load(string id, bool cloud)
Definition: Game.cs:313
int saveCount
Definition: Game.cs:231
int lastGameSpeedIndex
Definition: Game.cs:225
MsgLog log
Definition: Game.cs:185
int gameSpeedIndex
Definition: Game.cs:223
GamePrincipal principal
Definition: Game.cs:221
static bool TryLoad(string id, bool cloud, Action onLoad)
Definition: Game.cs:302
void AddAdventurers()
Definition: Game.cs:892
DomainManager domains
Definition: Game.cs:164
static string id
Definition: Game.cs:147
void GotoTitle(bool showDialog=true)
Definition: Game.cs:919
bool Save(bool isAutoSave=false, bool silent=false)
Definition: Game.cs:948
SpatialManager spatials
Definition: Game.cs:152
PCCUniformManager uniforms
Definition: Game.cs:191
TeleportManager teleports
Definition: Game.cs:194
static void Create(string _id=null, bool cloud=false)
Definition: Game.cs:681
static Game Instance
Definition: Game.cs:143
void Kill()
Definition: Game.cs:1018
void OnDeserializing(StreamingContext context)
Definition: Game.cs:1065
Prologue Prologue
Definition: Game.cs:257
CardManager cards
Definition: Game.cs:155
bool isCloud
Definition: Game.cs:239
Zone activeZone
Definition: Game.cs:245
void OnBeforeSave()
Definition: Game.cs:1004
void Pause(Action onUnpause=null)
Definition: Game.cs:1040
GameUpdater updater
Definition: Game.cs:243
void OnUpdate()
Definition: Game.cs:289
static new void Wait(float a, Card c)
Definition: Game.cs:276
static float waitTimer
Definition: Game.cs:145
Flags flags
Definition: Game.cs:212
static new void Wait(float a, Point p)
Definition: Game.cs:271
bool altInv
Definition: Game.cs:263
Zone lastActiveZone
Definition: Game.cs:247
void OnLoad()
Definition: Game.cs:351
new World world
Definition: Game.cs:173
RelationManager relations
Definition: Game.cs:182
int dateScratch
Definition: Game.cs:206
Config config
Definition: Game.cs:215
bool isKilling
Definition: Game.cs:237
QuestManager quests
Definition: Game.cs:179
double backupTime
Definition: Game.cs:209
void Quit()
Definition: Game.cs:937
int idDifficulty
Definition: Game.cs:203
bool altCraft
Definition: Game.cs:265
float timeSinceStart
Definition: Game.cs:233
void OnGameInstantiated()
Definition: Game.cs:697
int seed
Definition: Game.cs:197
static void Wait(float a)
Definition: Game.cs:284
void StartNewGame()
Definition: Game.cs:754
FactionManager factions
Definition: Game.cs:161
Zone StartZone
Definition: Game.cs:269
Version version
Definition: Game.cs:167
int idPrologue
Definition: Game.cs:200
Definition: IO.cs:11
static void KillActor()
Definition: LayerTitle.cs:191
static EmbarkActor actor
Definition: LayerTitle.cs:25
Layer SetOnKill(Action action)
Definition: Layer.cs:579
Definition: MsgLog.cs:7
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
Party Create(Chara leader)
Definition: PartyManager.cs:9
List< int > uidMembers
Definition: Party.cs:11
List< Chara > members
Definition: Party.cs:18
bool layerAbility
Definition: Player.cs:35
bool layerInventory
Definition: Player.cs:33
double timeElapsed
Definition: Player.cs:62
Definition: Player.cs:11
void OnStartNewGame()
Definition: Player.cs:1197
RecipeManager recipes
Definition: Player.cs:913
float angle
Definition: Player.cs:787
Pref pref
Definition: Player.cs:829
Stats stats
Definition: Player.cs:832
bool resetPrincipal
Definition: Player.cs:993
void OnBeforeSave()
Definition: Player.cs:1272
int uidChara
Definition: Player.cs:688
void OnLoad()
Definition: Player.cs:1248
int bankMoney
Definition: Player.cs:733
void OnCreateGame()
Definition: Player.cs:1164
Definition: Point.cs:9
bool IsSync
Definition: Point.cs:332
Vector2Int posAsh
Definition: Prologue.cs:21
string idStartZone
Definition: Prologue.cs:7
Vector2Int posFiama
Definition: Prologue.cs:23
int hour
Definition: Prologue.cs:19
int startX
Definition: Prologue.cs:9
HashSet< string > completedIDs
Definition: QuestManager.cs:17
List< Quest > list
Definition: QuestManager.cs:11
Quest Add(string id, string idGlobalChara=null)
Definition: QuestManager.cs:29
Quest Start(string id, string idGlobalChara)
Definition: QuestManager.cs:41
List< Quest > globalList
Definition: QuestManager.cs:14
Quest Get(string id)
Quest GetGlobal(string id)
Definition: Quest.cs:7
virtual string idSource
Definition: Quest.cs:149
string id
Definition: Quest.cs:31
void ChangePhase(int a)
Definition: Quest.cs:572
Quest SetClient(Chara c, bool assignQuest=true)
Definition: Quest.cs:380
static Quest Create(string _id, string _idPerson=null, Chara c=null)
Definition: Quest.cs:241
static void BuildList()
static RecipeSource Get(string id)
Dictionary< string, int > knownRecipes
void Add(string id, bool showEffect=true)
void OnVersionUpdate()
Definition: Scene.cs:8
void OnKillGame()
Definition: Scene.cs:341
void Init(Mode newMode)
Definition: Scene.cs:178
Mode
Definition: Scene.cs:10
SourceQuest quests
static Spatial Create(string id, Spatial parent, bool register, int x=-99999, int y=-99999, int icon=0)
Definition: SpatialGen.cs:16
static Spatial CreateRecursive(string id, Spatial parent=null)
Definition: SpatialGen.cs:3
List< Zone > Zones
Zone Find(string id)
GlobalSpatialList map
List< Spatial > listDestryoed
void _OnLoad()
Definition: Spatial.cs:663
void OnBeforeSave()
Definition: Spatial.cs:654
SourceZone.Row source
Definition: Spatial.cs:441
bool destryoed
Definition: Spatial.cs:45
virtual void SetMainFaction(Faction f)
Definition: Spatial.cs:632
string id
Definition: Spatial.cs:13
Stats Set(int[] _raw, int _rawIndex, Chara _CC)
Definition: Stats.cs:109
virtual int max
Definition: Stats.cs:68
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
void RefreshGridRecursive()
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53
Definition: Thing.cs:8
static TooltipManager Instance
void HideTooltips(bool immediate=false)
Definition: Wait.cs:2
static WidgetSideScreen Instance
override void OnChangeResolution()
Definition: Window.cs:13
static Dictionary< string, int > dictTab
Definition: Window.cs:596
Definition: World.cs:4
Region region
Definition: World.cs:23
GameDate date
Definition: World.cs:6
Definition: Zone.cs:12
override string ToString()
Definition: Zone.cs:540
void OnKillGame()
Definition: Zone.cs:1651
ElementContainerZone elements
Definition: Zone.cs:43
bool IsPCFaction
Definition: Zone.cs:466
Card AddCard(Card t, Point point)
Definition: Zone.cs:1910
uint Bits
Definition: BitArray32.cs:6
override bool Equals(object obj)
Definition: Version.cs:95
bool IsBelow(int _major, int _minor, int _batch)
Definition: Version.cs:31