Elin Decompiled Documentation EA 23.130 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 EClass.game.isLoading = false;
345 }
346
347 public void OnLoad()
348 {
349 domains.OnLoad();
352 world._OnLoad();
353 player.OnLoad();
355 {
356 EClass.pc.party.members.ForEach(delegate(Chara c)
357 {
358 c.currentZone = EClass.pc.homeZone;
359 c.global.transition = new ZoneTransition
360 {
361 state = ZoneTransition.EnterState.Return
362 };
363 });
364 }
365 player.zone = EClass.pc.currentZone;
366 EClass.pc.currentZone.lastActive = world.date.GetRaw();
367 if (spatials.Find("somewhere") == null)
368 {
369 SpatialGen.Create("somewhere", world.region, register: true);
370 }
371 EClass.pc.homeZone.isKnown = true;
374 foreach (Thing item in EClass.pc.things.List((Thing t) => t.Num <= 0 || t.isDestroyed))
375 {
376 item.parent.RemoveCard(item);
377 }
378 foreach (Thing item2 in EClass.pc.things.List((Thing t) => t.trait is TraitChestMerchant))
379 {
380 item2.Destroy();
381 }
382 foreach (Thing item3 in EClass.pc.things.List((Thing t) => t.invY == 1 && t.invX == -1))
383 {
384 item3.invY = 0;
385 }
386 foreach (Chara value in EClass.game.cards.globalCharas.Values)
387 {
388 if (value.id == "demitas" && value.faction.id == "wilds")
389 {
391 }
392 if (value.memberType == FactionMemberType.Livestock && !value.IsPCFaction)
393 {
394 value.memberType = FactionMemberType.Default;
395 }
396 if (!value.isDyed && value.HasTag(CTAG.random_color))
397 {
398 value.DyeRandom();
399 }
400 }
401 foreach (FactionBranch child in EClass.pc.faction.GetChildren())
402 {
403 foreach (Chara member in child.members)
404 {
405 if (!member.isDead && (member.currentZone == null || member.currentZone.id == "somewhere"))
406 {
407 Debug.Log("exception: Moving invalid chara: " + member.Name + "/" + member.currentZone?.ToString() + "/" + member.homeBranch?.ToString() + "/" + member.faction);
408 member.MoveZone(child.owner, ZoneTransition.EnterState.RandomVisit);
409 }
410 member.RefreshWorkElements(child.owner.elements);
411 member.Refresh();
412 }
413 }
414 EClass.pc.angle = player.angle;
416 if (cards.listAdv.Count == 0)
417 {
419 }
420 quests.list.ForeachReverse(delegate(Quest q)
421 {
422 if (!(q is QuestRandom))
423 {
424 foreach (Quest item4 in quests.list)
425 {
426 if (q != item4 && item4.id == q.id)
427 {
428 quests.list.Remove(item4);
429 break;
430 }
431 }
432 }
433 });
434 quests.globalList.ForeachReverse(delegate(Quest q)
435 {
436 if (!(q is QuestRandom))
437 {
438 foreach (Quest global in quests.globalList)
439 {
440 if (q != global && global.id == q.id)
441 {
442 quests.globalList.Remove(global);
443 break;
444 }
445 }
446 }
447 });
448 TryAddQuest("into_darkness", "exile_kettle");
449 if (version.IsBelow(0, 23, 100))
450 {
451 int num = player.recipes.knownRecipes.TryGetValue("trainingDummy_heavy", 0);
452 if (num != 0)
453 {
454 player.recipes.knownRecipes["trainingDummy_heavy1"] = num;
455 }
456 }
457 if (version.IsBelow(0, 23, 96))
458 {
459 EClass.game.principal = IO.DeepCopy(EClass.setting.start.principals[0]);
460 player.resetPrincipal = true;
461 }
462 if (player.resetPrincipal)
463 {
464 GameDifficultySetting gameDifficultySetting = EClass.setting.start.difficulties[idDifficulty];
465 EClass.game.principal.id = -1;
466 EClass.game.principal.permadeath = gameDifficultySetting.deleteGameOnDeath;
467 EClass.game.principal.disableManualSave = !gameDifficultySetting.allowManualSave;
468 EClass.core.actionsNextFrame.Add(delegate
469 {
470 EClass.ui.AddLayer<LayerWorldSetting>();
471 });
472 }
473 if (version.IsBelow(0, 23, 93))
474 {
476 Debug.Log("â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– â– feafefaeffaeaffeaaeaefseasfaefaef");
477 while (TryAddRecipe())
478 {
479 }
480 }
481 if (version.IsBelow(0, 23, 72))
482 {
483 foreach (Chara value2 in EClass.game.cards.globalCharas.Values)
484 {
485 if (!value2.isDead)
486 {
487 value2.c_wasInPcParty = false;
488 }
489 }
490 }
491 if (version.IsBelow(0, 23, 59))
492 {
493 while (TryDestroy())
494 {
495 }
496 }
497 if (version.IsBelow(0, 23, 52))
498 {
499 player.flags.toggleHotbarHighlightActivated = true;
500 }
501 if (version.IsBelow(0, 23, 51))
502 {
503 foreach (Chara value3 in EClass.game.cards.globalCharas.Values)
504 {
505 if (!(value3.id != "adv") && value3.IsPCFaction)
506 {
507 value3.idSkin = value3.uid % (value3.source._tiles.Length - 4) / 2 * 2 + ((!value3.IsMale) ? 1 : 0);
508 }
509 }
510 }
511 if (version.IsBelow(0, 22, 91))
512 {
513 TryAddQuestIfActive("demitas_spellwriter", "into_darkness");
514 }
515 if (version.IsBelow(0, 22, 86))
516 {
517 Chara chara = cards.globalCharas.Find("demitas");
518 if (chara != null && chara._works != null && chara._works.Count > 0)
519 {
520 chara._works[0] = 51;
521 }
522 }
523 if (version.IsBelow(0, 22, 86))
524 {
525 TryAddQuest("farris_tulip", "greatDebt");
526 }
527 if (version.IsBelow(0, 22, 86))
528 {
529 TryAddQuest("exile_whisper", "exile_kettle");
530 }
531 if (version.IsBelow(0, 22, 85))
532 {
533 TryAddQuest("exile_meet", "pre_debt");
534 }
535 if (version.IsBelow(0, 22, 60) && EClass.game.quests.Get<QuestDebt>() != null)
536 {
537 Chara chara2 = cards.globalCharas.Find("loytel");
538 Debug.Log("Loytelfix: " + chara2.homeZone);
539 if (chara2.homeZone == null || !chara2.homeZone.IsPCFaction)
540 {
542 chara2.homeZone = EClass.pc.homeBranch.owner;
543 chara2.RemoveEditorTag(EditorTag.Invulnerable);
544 }
545 }
546 if (version.IsBelow(0, 22, 52) && quests.completedIDs.Contains("vernis_gold"))
547 {
548 quests.Add("pre_debt", "farris");
549 }
550 if (quests.completedIDs.Contains("farris_tulip"))
551 {
552 quests.globalList.ForeachReverse(delegate(Quest q)
553 {
554 if (q.id == "farris_tulip")
555 {
556 quests.globalList.Remove(q);
557 }
558 });
559 }
560 quests.list.ForeachReverse(delegate(Quest q)
561 {
562 if (q is QuestDialog && quests.completedIDs.Contains(q.id))
563 {
564 quests.list.Remove(q);
565 }
566 });
567 if (version.IsBelow(0, 22, 20))
568 {
569 foreach (Chara value4 in cards.globalCharas.Values)
570 {
571 value4.SetBool(18, enable: false);
572 }
573 }
574 if (version.IsBelow(0, 22, 22))
575 {
576 if (EClass.pc.faithElements != null)
577 {
579 }
580 foreach (Element item5 in EClass.pc.elements.ListElements((Element e) => e.source.categorySub == "god"))
581 {
582 EClass.pc.SetFeat(item5.id, 0);
583 }
585 }
586 if (version.IsBelow(0, 22, 45))
587 {
588 player.debt = 20000000;
589 }
590 if (!version.Equals(EClass.core.version))
591 {
592 player.recipes.OnVersionUpdate();
593 }
594 if (cards.container_deposit == null)
595 {
596 cards.container_deposit = ThingGen.Create("container_deposit");
597 if (player.bankMoney > 0)
598 {
599 cards.container_deposit.Add("money", player.bankMoney);
600 }
601 }
602 foreach (Quest item6 in quests.list)
603 {
604 if (item6 is QuestSequence && !EClass.sources.quests.map.ContainsKey(item6.idSource))
605 {
606 item6.phase = 0;
607 }
608 }
609 foreach (Quest global2 in quests.globalList)
610 {
611 if (global2 is QuestSequence && !EClass.sources.quests.map.ContainsKey(global2.idSource))
612 {
613 global2.phase = 0;
614 }
615 }
616 void TryAddQuest(string idQuest, string idReqQuest)
617 {
618 if (quests.completedIDs.Contains(idReqQuest) && !quests.completedIDs.Contains(idQuest) && quests.GetGlobal(idQuest) == null && quests.Get(idQuest) == null)
619 {
620 quests.Add(idQuest);
621 }
622 }
623 void TryAddQuestIfActive(string idQuest, string idReqQuest)
624 {
625 if (quests.Get(idReqQuest) != null && !quests.completedIDs.Contains(idQuest) && quests.GetGlobal(idQuest) == null && quests.Get(idQuest) == null)
626 {
627 quests.Add(idQuest);
628 }
629 }
630 bool TryAddRecipe()
631 {
632 foreach (string key in player.recipes.knownRecipes.Keys)
633 {
634 if (key.Length > 1 && key[0] == 'b')
635 {
636 RecipeSource recipeSource = RecipeManager.Get(key + "-p");
637 if (recipeSource != null && !player.recipes.knownRecipes.ContainsKey(recipeSource.id))
638 {
639 Debug.Log(recipeSource.id);
640 player.recipes.Add(recipeSource.id, showEffect: false);
641 return true;
642 }
643 recipeSource = RecipeManager.Get(key.Replace("-p", ""));
644 if (recipeSource != null && !player.recipes.knownRecipes.ContainsKey(recipeSource.id))
645 {
646 Debug.Log(recipeSource.id);
647 player.recipes.Add(recipeSource.id, showEffect: false);
648 return true;
649 }
650 }
651 }
652 return false;
653 }
654 static bool TryDestroy()
655 {
656 for (int i = 0; i < EClass.pc.party.members.Count; i++)
657 {
658 Chara chara3 = EClass.pc.party.members[i];
659 Debug.Log(chara3.id + "/" + chara3.uid + "/" + chara3._cints[1]);
660 for (int j = 0; j < EClass.pc.party.members.Count; j++)
661 {
662 Chara chara4 = EClass.pc.party.members[j];
663 if (i != j && chara3.uid == chara4.uid)
664 {
665 EClass.pc.party.uidMembers.RemoveAt(j);
666 EClass.pc.party.members.RemoveAt(j);
667 chara4.Destroy();
668 Debug.Log("Destroyed");
669 return true;
670 }
671 }
672 }
673 return false;
674 }
675 }
676
677 public static void Create(string _id = null, bool cloud = false)
678 {
679 id = _id ?? GameIO.GetNewId(cloud ? CorePath.RootSaveCloud : CorePath.RootSave, "world_");
680 OnBeforeInstantiate();
681 EClass.core.game = (Instance = new Game());
682 EClass.core.game.isCloud = cloud;
686 }
687
688 public static void OnBeforeInstantiate()
689 {
690 Player.seedHallucination = 0;
691 }
692
693 public void OnGameInstantiated()
694 {
695 HotItemHeld.taskBuild = null;
696 InvOwner.Trader = (InvOwner.Main = null);
697 LayerDrama.currentQuest = null;
698 BookList.Init();
699 ContentGallery.lastPage = 0;
700 ContentGallery.listMode = false;
701 if (!Application.isEditor || !EClass.debug.enable)
702 {
704 }
705 foreach (Chara value in cards.globalCharas.Values)
706 {
707 if (value.uid == player.uidChara)
708 {
709 player.chara = value;
710 break;
711 }
712 }
714 EClass.ui.widgets.OnGameInstantiated();
715 EClass.Sound.ResetPlaylist();
716 EClass.core.config.ApplyFPS(force: true);
717 }
718
719 public void _Create()
720 {
721 principal = IO.DeepCopy(EClass.setting.start.principals[0]);
722 idDifficulty = 1;
723 config.snapFreePos = (config.slope = (config.autoWall = true));
724 config.autoCombat.abortOnAllyDead = true;
725 config.autoCombat.abortOnHalfHP = true;
726 config.autoCombat.bUseHotBar = true;
727 config.autoCombat.bUseInventory = true;
728 config.autoCombat.bDontChangeTarget = true;
729 config.autoCombat.abortOnKill = true;
730 config.autoCombat.abortOnItemLoss = true;
731 seed = EClass.rnd(10000);
732 Debug.Log("creating game: " + id + " seed:" + seed);
733 uniforms.Import();
734 religions.OnCreateGame();
735 factions.OnCreateGame();
737 domains.OnCreateGame();
738 foreach (Spatial value in spatials.map.Values)
739 {
740 value.SetMainFaction(factions.Find(value.source.faction.IsEmpty("wilds")));
741 }
742 player.OnCreateGame();
743 cards.container_shipping = ThingGen.Create("container_shipping");
744 cards.container_deliver = ThingGen.Create("container_delivery");
745 cards.container_deposit = ThingGen.Create("container_deposit");
746 bp = new GameBlueprint();
747 bp.Create();
748 }
749
750 public void StartNewGame()
751 {
752 EClass.pc.homeZone = StartZone;
754 parties.Create(EClass.pc);
755 Prologue prologue = EClass.game.Prologue;
756 CharaGen.Create("fiama").SetGlobal(EClass.game.StartZone, prologue.posFiama.x, prologue.posFiama.y);
757 CharaGen.Create("ashland").SetGlobal(EClass.game.StartZone, prologue.posAsh.x, prologue.posAsh.y);
758 if ((bool)LayerTitle.actor)
759 {
760 world.date.hour = EClass.game.Prologue.hour;
762 Player obj = player;
763 Chara chara = EClass.pc;
764 Zone zone2 = (EClass.pc.homeZone = EClass.game.spatials.Find(EClass.game.Prologue.idStartZone));
765 Zone zone4 = (chara.currentZone = zone2);
766 obj.zone = zone4;
767 EClass.pc.global.transition = new ZoneTransition
768 {
769 state = ZoneTransition.EnterState.Exact,
771 z = EClass.game.Prologue.startZ
772 };
773 EClass.pc.hp = EClass.pc.MaxHP;
776 EClass.pc.AddCondition<ConFaint>(200, force: true);
777 }
778 else
779 {
780 EClass.pc.homeZone = EClass.game.spatials.Find(EClass.game.Prologue.idStartZone);
781 Zone zone5 = null;
782 ZoneTransition transition = new ZoneTransition
783 {
784 state = ZoneTransition.EnterState.Auto
785 };
786 Chara c = EClass.game.cards.globalCharas.Find("ashland");
787 switch (EClass.debug.startScene)
788 {
789 case CoreDebug.StartScene.Zone:
791 transition = new ZoneTransition
792 {
793 state = ZoneTransition.EnterState.Exact,
795 z = EClass.game.Prologue.startZ
796 };
797 break;
798 case CoreDebug.StartScene.Home:
799 case CoreDebug.StartScene.Story_Test:
801 transition = new ZoneTransition
802 {
803 state = ZoneTransition.EnterState.Exact,
805 z = EClass.game.Prologue.startZ
806 };
807 break;
808 case CoreDebug.StartScene.Home_Cave:
809 EClass.game.idPrologue = 2;
811 transition = new ZoneTransition
812 {
813 state = ZoneTransition.EnterState.Exact,
815 z = EClass.game.Prologue.startZ
816 };
817 break;
818 case CoreDebug.StartScene.MeetFarris:
819 {
820 Zone parent4 = EClass.game.spatials.Find("nymelle");
821 zone5 = SpatialGen.Create("nymelle", parent4, register: true) as Zone;
822 zone5.lv = -2;
823 EClass.game.quests.Start("exploration", c, assignQuest: false);
824 break;
825 }
826 case CoreDebug.StartScene.NymelleBoss:
827 {
828 Zone parent3 = EClass.game.spatials.Find("nymelle");
829 zone5 = SpatialGen.Create("nymelle_boss", parent3, register: true) as Zone;
830 zone5.lv = -5;
831 EClass.game.quests.Start("exploration", c, assignQuest: false).ChangePhase(2);
832 break;
833 }
834 case CoreDebug.StartScene.AfterNymelle:
836 transition = new ZoneTransition
837 {
838 state = ZoneTransition.EnterState.Exact,
840 z = EClass.game.Prologue.startZ
841 };
842 EClass.game.quests.Start("exploration", c, assignQuest: false).ChangePhase(5);
843 EClass.game.quests.globalList.Add(Quest.Create("sharedContainer").SetClient(c, assignQuest: false));
844 EClass.game.quests.globalList.Add(Quest.Create("crafter").SetClient(c, assignQuest: false));
845 EClass.game.quests.globalList.Add(Quest.Create("defense").SetClient(c, assignQuest: false));
846 break;
847 case CoreDebug.StartScene.Melilith:
848 {
849 Zone parent2 = EClass.game.spatials.Find("cursed_manor");
850 zone5 = SpatialGen.Create("cursed_manor_dungeon", parent2, register: true) as Zone;
851 zone5.lv = -5;
852 break;
853 }
854 case CoreDebug.StartScene.Tefra:
855 {
856 Zone parent = EClass.game.spatials.Find("vernis");
857 zone5 = SpatialGen.Create("vernis_mine", parent, register: true) as Zone;
858 zone5.lv = -7;
859 break;
860 }
861 }
862 if (zone5 != null)
863 {
864 Player obj2 = player;
865 Chara chara2 = EClass.pc;
866 Zone zone2 = (EClass.pc.homeZone = zone5);
867 Zone zone4 = (chara2.currentZone = zone2);
868 obj2.zone = zone4;
869 EClass.pc.global.transition = transition;
870 }
871 else
872 {
873 Player obj3 = player;
874 Zone zone4 = (EClass.pc.currentZone = EClass.game.spatials.Find(EClass.debug.startZone));
875 obj3.zone = zone4;
876 EClass.pc.global.transition = new ZoneTransition
877 {
878 state = ZoneTransition.EnterState.Return
879 };
880 }
881 }
882 EClass.pc.homeZone.isKnown = true;
883 AddAdventurers();
884 player.OnStartNewGame();
885 EClass.scene.Init(Scene.Mode.StartGame);
886 }
887
888 public void AddAdventurers()
889 {
890 List<Zone> source = world.region.ListTowns();
891 string[] array = new string[6] { "adv_kiria", "adv_gaki", "adv_wini", "adv_verna", "adv_ivory", "adv_mesherada" };
892 for (int i = 0; i < EClass.setting.balance.numAdv; i++)
893 {
894 Zone zone = source.RandomItem();
895 if (zone is Zone_SubTown && EClass.rnd(5) != 0)
896 {
897 i--;
898 continue;
899 }
900 if (i >= array.Length && i < array.Length + 2)
901 {
903 }
904 Chara chara = CharaGen.Create((i < array.Length) ? array[i] : ((EClass.rnd(10) == 0) ? "adv_fairy" : "adv"));
905 chara.SetHomeZone(zone);
906 chara.global.transition = new ZoneTransition
907 {
908 state = ZoneTransition.EnterState.RandomVisit
909 };
910 zone.AddCard(chara);
911 cards.listAdv.Add(chara);
912 }
913 }
914
915 public void GotoTitle(bool showDialog = true)
916 {
917 if (showDialog)
918 {
919 Dialog.YesNo("dialog_gotoTitle", delegate
920 {
921 if (EClass.game.Save(isAutoSave: true))
922 {
923 EClass.scene.Init(Scene.Mode.Title);
924 }
925 });
926 }
927 else
928 {
929 EClass.scene.Init(Scene.Mode.Title);
930 }
931 }
932
933 public void Quit()
934 {
935 Dialog.YesNo("dialog_quit", delegate
936 {
937 if (EClass.game.Save())
938 {
939 EClass.core.Quit();
940 }
941 });
942 }
943
944 public bool Save(bool isAutoSave = false, bool silent = false)
945 {
946 if (EClass.ui.IsDragging)
947 {
948 EClass.ui.EndDrag(canceled: true);
949 }
950 if (isAutoSave && EClass.debug.ignoreAutoSave)
951 {
952 return true;
953 }
954 bool flag = EClass.core.config.game.autoBackup && backupTime >= (double)(EClass.core.config.game.backupInterval * 60 * 30);
955 if (flag)
956 {
957 backupTime = 0.0;
958 }
960 countLoadedMaps = 0;
961 player.pref.layerInventory = EClass.ui.layerFloat.GetLayer<LayerInventory>();
962 if (player.pref.layerInventory)
963 {
964 player.pref.layerAbility = EClass.ui.layerFloat.GetLayer<LayerAbility>();
965 }
966 player.pref.layerCraft = EClass.ui.layerFloat.GetLayer<LayerCraftFloat>();
967 player.angle = EClass.pc.angle;
968 version = EClass.core.version;
969 EClass.ui.widgets.UpdateConfigs();
970 GameIndex gameIndex = null;
971 try
972 {
973 OnBeforeSave();
974 gameIndex = GameIO.SaveGame();
975 }
976 catch (Exception ex)
977 {
978 EClass.ui.Say(ex.Message);
979 SE.Beep();
980 Msg.Say("error_save");
981 return false;
982 }
983 if (flag)
984 {
985 GameIO.MakeBackup(gameIndex);
986 EClass.ui.Say("backupDone");
987 }
988 if (!silent)
989 {
990 if (!isAutoSave)
991 {
992 SE.WriteJournal();
993 }
994 Msg.Say("saved");
995 }
996 saveCount++;
997 return true;
998 }
999
1000 public void OnBeforeSave()
1001 {
1002 foreach (Zone zone in spatials.Zones)
1003 {
1004 zone.OnBeforeSave();
1005 }
1006 player.OnBeforeSave();
1007 foreach (Spatial item in spatials.listDestryoed)
1008 {
1009 item.DeleteMapRecursive();
1010 }
1011 spatials.listDestryoed.Clear();
1012 }
1013
1014 public void Kill()
1015 {
1016 isKilling = true;
1017 Debug.Log("Killing Game: IsStarted? " + EClass.core.IsGameStarted);
1019 {
1020 EClass.ui.OnKillGame();
1022 activeZone.OnKillGame();
1023 }
1024 EClass.core.game = (Instance = null);
1025 EClass.Sound.currentPlaylist = null;
1026 Window.dictTab.Clear();
1027 foreach (Texture2D loadedTexture in loadedTextures)
1028 {
1029 if (loadedTexture != null)
1030 {
1031 UnityEngine.Object.Destroy(loadedTexture);
1032 }
1033 }
1034 }
1035
1036 public void Pause(Action onUnpause = null)
1037 {
1038 isPaused = true;
1039 LayerPause layerPause = EClass.ui.AddLayer<LayerPause>();
1040 Game lastGame = EClass.game;
1041 if (onUnpause == null)
1042 {
1043 return;
1044 }
1045 layerPause.SetOnKill(delegate
1046 {
1047 if (EClass.core.IsGameStarted && lastGame == EClass.game)
1048 {
1049 onUnpause();
1050 }
1051 });
1052 }
1053
1054 [OnSerializing]
1055 private void OnSerializing(StreamingContext context)
1056 {
1057 Debug.Log("#io game OnSerializing");
1058 }
1059
1060 [OnDeserializing]
1061 private void OnDeserializing(StreamingContext context)
1062 {
1063 Debug.Log("#io game OnDeserializing");
1064 Instance = this;
1065 }
1066}
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:2510
ElementContainerCard elements
Definition: Card.cs:37
string id
Definition: Card.cs:31
int invY
Definition: Card.cs:1855
bool IsMale
Definition: Card.cs:2284
string Name
Definition: Card.cs:2037
bool HasTag(CTAG tag)
Definition: Card.cs:2495
void DyeRandom()
Definition: Card.cs:5443
int uid
Definition: Card.cs:118
Trait trait
Definition: Card.cs:49
bool isDyed
Definition: Card.cs:430
void Destroy()
Definition: Card.cs:4680
ThingContainer things
Definition: Card.cs:34
virtual bool IsPC
Definition: Card.cs:2043
int invX
Definition: Card.cs:1843
Thing Add(string id, int num=1, int lv=1)
Definition: Card.cs:2927
int Num
Definition: Card.cs:154
virtual bool isSynced
Definition: Card.cs:1987
static Chara Create(string id, int lv=-1)
Definition: CharaGen.cs:17
Definition: Chara.cs:10
void Refresh(bool calledRecursive=false)
Definition: Chara.cs:1518
void SetHomeZone(Zone zone)
Definition: Chara.cs:1239
int[] _cints
Definition: Chara.cs:82
void RefreshWorkElements(ElementContainer parent=null)
Definition: Chara.cs:8273
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:8513
Faction faction
Definition: Chara.cs:417
void SetFeat(int id, int value=1, bool msg=false)
Definition: Chara.cs:9063
Party party
Definition: Chara.cs:43
Chara SetGlobal(Zone _home, int x, int z)
Definition: Chara.cs:1275
override bool IsPCFaction
Definition: Chara.cs:661
override int MaxHP
Definition: Chara.cs:698
Zone currentZone
Definition: Chara.cs:245
Stats mana
Definition: Chara.cs:968
FactionMemberType memberType
Definition: Chara.cs:46
Stats stamina
Definition: Chara.cs:960
Zone homeZone
Definition: Chara.cs:257
void RefreshFaithElement()
Definition: Chara.cs:9320
ElementContainer faithElements
Definition: Chara.cs:38
FactionBranch homeBranch
Definition: Chara.cs:894
bool isDead
Definition: Chara.cs:379
List< int > _works
Definition: Chara.cs:52
void MoveZone(string alias)
Definition: Chara.cs:3029
new GameConfig game
Definition: CoreConfig.cs:598
void ApplyFPS(bool force=false)
Definition: CoreConfig.cs:826
void TryUpdatePlayedHour()
Definition: CoreConfig.cs:800
string startZone
Definition: CoreDebug.cs:105
bool enable
Definition: CoreDebug.cs:285
void OnLoad()
Definition: CoreDebug.cs:689
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:246
SourceElement.Row source
Definition: ELEMENT.cs:269
List< Chara > members
void AddMemeber(Chara c)
Faction Find(string id)
List< FactionBranch > GetChildren()
Definition: FACTION.cs:200
string id
Definition: FACTION.cs:127
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:1055
void _Create()
Definition: Game.cs:719
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:688
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:888
DomainManager domains
Definition: Game.cs:164
static string id
Definition: Game.cs:147
void GotoTitle(bool showDialog=true)
Definition: Game.cs:915
bool Save(bool isAutoSave=false, bool silent=false)
Definition: Game.cs:944
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:677
static Game Instance
Definition: Game.cs:143
void Kill()
Definition: Game.cs:1014
void OnDeserializing(StreamingContext context)
Definition: Game.cs:1061
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:1000
void Pause(Action onUnpause=null)
Definition: Game.cs:1036
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:347
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:933
int idDifficulty
Definition: Game.cs:203
bool altCraft
Definition: Game.cs:265
float timeSinceStart
Definition: Game.cs:233
void OnGameInstantiated()
Definition: Game.cs:693
int seed
Definition: Game.cs:197
static void Wait(float a)
Definition: Game.cs:284
void StartNewGame()
Definition: Game.cs:750
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:332
void Init(Mode newMode)
Definition: Scene.cs:174
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
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:538
void OnKillGame()
Definition: Zone.cs:1634
ElementContainerZone elements
Definition: Zone.cs:43
bool IsPCFaction
Definition: Zone.cs:464
Card AddCard(Card t, Point point)
Definition: Zone.cs:1893
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