Example #1
0
        private void BuildDecksOnLoadGame(EncounterManagerDto emDto)
        {
            var encounterStore = FindObjectOfType <EncounterStore>();

            _usedEncounters = new List <Encounter>();

            var normalEncounterSize = emDto.NormalDeck.Size;

            if (normalEncounterSize > 0)
            {
                _normalEncounterDeck = new EncounterDeck(encounterStore.GetNormalEncounters(), normalEncounterSize, _usedEncounters);
                _normalEncounterDeck.Shuffle();
            }

            _campingDeck = new EncounterDeck(encounterStore.GetCampingEncounters(), emDto.CampingDeck.Size, _usedEncounters);

            if (GameManager.Instance.InCombat())
            {
                PauseTimer();
            }
            else
            {
                ResetTimer();
                ResumeTimer();

                var travelManager = FindObjectOfType <TravelManager>();
                travelManager.PlayTravelMusic();
            }
        }
Example #2
0
        public void RevealEncounterCard()
        {
            if (EncounterDeck.Cards.Count() == 0)
            {
                if (Game.CurrentPhase.Code == PhaseCode.Quest)
                {
                    EncounterDeck.ShuffleDiscardPileIntoDeck();
                }
                else
                {
                    return;
                }
            }

            cancelWhenRevealedEffect = null;

            var card = EncounterDeck.GetFromTop(1).First();

            EncounterDeck.RemoveFromDeck(card);

            RevealedEncounterCard = GetRevealedEncounterCard(card);

            CheckForResponsesToRevealedCard();

            TriggerWhenRevealedEffects(card);

            TriggerOtherEffects(card);

            if (!(RevealedEncounterCard.Card is ITreacheryCard))
            {
                AddToStagingArea(RevealedEncounterCard);
            }

            RevealedEncounterCard = null;
        }
Example #3
0
 public DeckBuilderForm(EncounterDeck deck)
 {
     this.InitializeComponent();
     Application.Idle   += new EventHandler(this.Application_Idle);
     this.fDeck          = deck.Copy();
     this.NameBox.Text   = this.fDeck.Name;
     this.LevelBox.Value = this.fDeck.Level;
     this.DeckView.Deck  = this.fDeck;
     this.update_groups();
     this.DeckView_SelectedCellChanged(null, null);
 }
Example #4
0
        private void BuildTestDeck()
        {
            var encounterStore = FindObjectOfType <EncounterStore>();

            var testEncounters = encounterStore.GetTestEncounters();

            _usedEncounters = new List <Encounter>();

            _testDeck = new EncounterDeck(testEncounters, testEncounters.Count, _usedEncounters);

            _testDeck.Shuffle();
        }
Example #5
0
 public static void FillDeck(EncounterDeck deck)
 {
     EncounterBuilder.build_creature_list(deck.Level - 2, deck.Level + 5, null, null, false);
     if (EncounterBuilder.fCreatures.Count == 0)
     {
         return;
     }
     while (deck.Cards.Count < 50)
     {
         int           num  = Session.Random.Next() % EncounterBuilder.fCreatures.Count;
         EncounterCard item = EncounterBuilder.fCreatures[num];
         deck.Cards.Add(item);
     }
 }
Example #6
0
        public void BuildDecksForNewDay()
        {
            var encounterStore = FindObjectOfType <EncounterStore>();

            if (UseTestDeck)
            {
                BuildTestDeck();
            }
            else
            {
                var normalEncounterSize = 3;

                const int extraEncounterChance = 5;

                //todo diceroller
                var roll = Random.Range(1, 101);

                if (roll <= extraEncounterChance)
                {
                    normalEncounterSize++;
                }

                if (_usedEncounters == null)
                {
                    _usedEncounters = new List <Encounter>();
                }

                _normalEncounterDeck = new EncounterDeck(encounterStore.GetNormalEncounters(), normalEncounterSize, _usedEncounters);

                var combatEncounters = encounterStore.GetCombatEncounters();

                _normalEncounterDeck.AddCard(combatEncounters[Random.Range(0, combatEncounters.Count)]);

                _normalEncounterDeck.Shuffle();
            }

            if (_campingDeck == null || _campingDeck.Size < 1)
            {
                _campingDeck = new EncounterDeck(encounterStore.GetCampingEncounters(), 5, _usedEncounters);
            }

            if (_encounterInProgress)
            {
                return;
            }

            ResetTimer();
            ResumeTimer();
        }
Example #7
0
        public DeckBuilderForm(EncounterDeck deck)
        {
            InitializeComponent();

            Application.Idle += new EventHandler(Application_Idle);

            fDeck = deck.Copy();

            NameBox.Text   = fDeck.Name;
            LevelBox.Value = fDeck.Level;
            DeckView.Deck  = fDeck;

            update_groups();
            DeckView_SelectedCellChanged(null, null);
        }
Example #8
0
        private void AddBtn_Click(object sender, EventArgs e)
        {
            EncounterDeck encounterDeck = new EncounterDeck()
            {
                Name  = "New Deck",
                Level = Session.Project.Party.Level
            };
            DeckBuilderForm deckBuilderForm = new DeckBuilderForm(encounterDeck);

            if (deckBuilderForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                Session.Project.Decks.Add(deckBuilderForm.Deck);
                Session.Modified = true;
                this.update_decks();
            }
        }
Example #9
0
        private void AutoBuildBtn_Click(object sender, EventArgs e)
        {
            AutoBuildForm autoBuildForm = new AutoBuildForm(AutoBuildForm.Mode.Deck);

            if (autoBuildForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                EncounterDeck encounterDeck = EncounterBuilder.BuildDeck(autoBuildForm.Data.Level, autoBuildForm.Data.Categories, autoBuildForm.Data.Keywords);
                if (encounterDeck != null)
                {
                    this.fDeck          = encounterDeck;
                    this.LevelBox.Value = this.fDeck.Level;
                    this.DeckView.Deck  = this.fDeck;
                    this.DeckView_SelectedCellChanged(null, null);
                }
            }
        }
Example #10
0
        public void ChangeEncounterDeck(IDeck <IEncounterCard> encounterDeck)
        {
            if (encounterDeck == null)
            {
                throw new ArgumentNullException("encounterDeck");
            }

            if (this.EncounterDeck != null)
            {
                EncounterDeck.ShuffleIn(cardsInStagingArea.Select(x => x.Card));
                cardsInStagingArea.Clear();
                this.EncounterDeck.ShuffleDiscardPileIntoDeck();
            }

            this.EncounterDeck = encounterDeck;
        }
Example #11
0
        private void AddBtn_Click(object sender, EventArgs e)
        {
            EncounterDeck deck = new EncounterDeck();

            deck.Name  = "New Deck";
            deck.Level = Session.Project.Party.Level;

            DeckBuilderForm dlg = new DeckBuilderForm(deck);

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                Session.Project.Decks.Add(dlg.Deck);
                Session.Modified = true;

                update_decks();
            }
        }
Example #12
0
        private void AutoBuildBtn_Click(object sender, EventArgs e)
        {
            AutoBuildForm dlg = new AutoBuildForm(AutoBuildForm.Mode.Deck);

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                EncounterDeck deck = EncounterBuilder.BuildDeck(dlg.Data.Level, dlg.Data.Categories, dlg.Data.Keywords);
                if (deck != null)
                {
                    fDeck = deck;

                    LevelBox.Value = fDeck.Level;
                    DeckView.Deck  = fDeck;
                    DeckView_SelectedCellChanged(null, null);
                }
            }
        }
Example #13
0
        public static void FillDeck(EncounterDeck deck)
        {
            build_creature_list(deck.Level - 2, deck.Level + 5, null, null, false);
            if (fCreatures.Count == 0)
            {
                return;
            }

            while (deck.Cards.Count < 50)
            {
                // Pick a card
                int           card_index = Session.Random.Next() % fCreatures.Count;
                EncounterCard card       = fCreatures[card_index];

                // Add this card to the deck
                deck.Cards.Add(card);
            }
        }
Example #14
0
        void run_encounter(EncounterDeck deck, bool choose_map)
        {
            MapAreaSelectForm map_dlg = null;

            if (choose_map)
            {
                map_dlg = new MapAreaSelectForm(Guid.Empty, Guid.Empty);
                if (map_dlg.ShowDialog() != DialogResult.OK)
                {
                    return;
                }
            }

            Encounter enc = new Encounter();
            bool      ok  = deck.DrawEncounter(enc);

            update_decks();

            if (ok)
            {
                CombatState cs = new CombatState();
                cs.Encounter  = enc;
                cs.PartyLevel = Session.Project.Party.Level;

                if ((map_dlg != null) && (map_dlg.Map != null))
                {
                    cs.Encounter.MapID = map_dlg.Map.ID;

                    if (map_dlg.MapArea != null)
                    {
                        cs.Encounter.MapAreaID = map_dlg.MapArea.ID;
                    }
                }

                CombatForm dlg = new CombatForm(cs);
                dlg.Show();
            }
            else
            {
                string str = "An encounter could not be built from this deck; check that there are enough cards remaining.";
                MessageBox.Show(str, "Masterplan", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Example #15
0
        private void DelveDeck_Click(object sender, EventArgs e)
        {
            EncounterDeck encounterDeck = new EncounterDeck()
            {
                Name = string.Concat(this.SelectedMap, " Deck")
            };
            DeckBuilderForm deckBuilderForm = new DeckBuilderForm(encounterDeck);

            if (deckBuilderForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                encounterDeck = deckBuilderForm.Deck;
                PlotPoint plotPoint = new PlotPoint(string.Concat(this.SelectedMap.Name, " Delve"))
                {
                    Element = new MapElement(this.SelectedMap.ID, Guid.Empty)
                };
                encounterDeck.DrawDelve(plotPoint, this.SelectedMap);
                Session.Project.Plot.Points.Add(plotPoint);
                Session.Modified = true;
                base.Close();
            }
        }
Example #16
0
        private void DelveDeck_Click(object sender, EventArgs e)
        {
            EncounterDeck deck = new EncounterDeck();

            deck.Name = SelectedMap + " Deck";

            DeckBuilderForm dlg = new DeckBuilderForm(deck);

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                deck = dlg.Deck;

                PlotPoint pp = new PlotPoint(SelectedMap.Name + " Delve");
                pp.Element = new MapElement(SelectedMap.ID, Guid.Empty);

                deck.DrawDelve(pp, SelectedMap);

                Session.Project.Plot.Points.Add(pp);
                Session.Modified = true;

                Close();
            }
        }
Example #17
0
        private void run_encounter(EncounterDeck deck, bool choose_map)
        {
            MapAreaSelectForm mapAreaSelectForm = null;

            if (choose_map)
            {
                mapAreaSelectForm = new MapAreaSelectForm(Guid.Empty, Guid.Empty);
                if (mapAreaSelectForm.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                {
                    return;
                }
            }
            Encounter encounter = new Encounter();
            bool      flag      = deck.DrawEncounter(encounter);

            this.update_decks();
            if (!flag)
            {
                MessageBox.Show("An encounter could not be built from this deck; check that there are enough cards remaining.", "Masterplan", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }
            CombatState combatState = new CombatState()
            {
                Encounter  = encounter,
                PartyLevel = Session.Project.Party.Level
            };

            if (mapAreaSelectForm != null && mapAreaSelectForm.Map != null)
            {
                combatState.Encounter.MapID = mapAreaSelectForm.Map.ID;
                if (mapAreaSelectForm.MapArea != null)
                {
                    combatState.Encounter.MapAreaID = mapAreaSelectForm.MapArea.ID;
                }
            }
            (new CombatForm(combatState)).Show();
        }
Example #18
0
        public static EncounterDeck BuildDeck(int level, List <string> categories, List <string> keywords)
        {
            EncounterBuilder.build_creature_list(level - 2, level + 5, categories, keywords, false);
            if (EncounterBuilder.fCreatures.Count == 0)
            {
                return(null);
            }
            Dictionary <CardCategory, Pair <int, int> > cardCategories = new Dictionary <CardCategory, Pair <int, int> >();

            cardCategories[CardCategory.SoldierBrute] = new Pair <int, int>(0, 18);
            cardCategories[CardCategory.Skirmisher]   = new Pair <int, int>(0, 14);
            cardCategories[CardCategory.Minion]       = new Pair <int, int>(0, 5);
            cardCategories[CardCategory.Artillery]    = new Pair <int, int>(0, 5);
            cardCategories[CardCategory.Controller]   = new Pair <int, int>(0, 5);
            cardCategories[CardCategory.Lurker]       = new Pair <int, int>(0, 2);
            cardCategories[CardCategory.Solo]         = new Pair <int, int>(0, 1);
            Dictionary <Difficulty, Pair <int, int> > difficulties = new Dictionary <Difficulty, Pair <int, int> >();

            if (level < 3)
            {
                difficulties[Difficulty.Easy] = new Pair <int, int>(0, 37);
            }
            else
            {
                difficulties[Difficulty.Trivial] = new Pair <int, int>(0, 7);
                difficulties[Difficulty.Easy]    = new Pair <int, int>(0, 30);
            }
            difficulties[Difficulty.Moderate] = new Pair <int, int>(0, 8);
            difficulties[Difficulty.Hard]     = new Pair <int, int>(0, 5);
            difficulties[Difficulty.Extreme]  = new Pair <int, int>(0, 0);
            EncounterDeck encounterDeck = new EncounterDeck()
            {
                Level = level
            };
            int num = 0;

            do
            {
Label0:
                if (num >= 100)
                {
                    break;
                }
                num++;
                int             num1     = Session.Random.Next() % EncounterBuilder.fCreatures.Count;
                EncounterCard   item     = EncounterBuilder.fCreatures[num1];
                CardCategory    category = item.Category;
                Pair <int, int> pair     = cardCategories[category];
                if (pair.First < pair.Second)
                {
                    Difficulty      difficulty = item.GetDifficulty(level);
                    Pair <int, int> item1      = difficulties[difficulty];
                    if (item1.First < item1.Second)
                    {
                        encounterDeck.Cards.Add(item);
                        Pair <int, int> first = cardCategories[category];
                        first.First = first.First + 1;
                        Pair <int, int> first1 = difficulties[difficulty];
                        first1.First = first1.First + 1;
                    }
                    else
                    {
                        goto Label0;
                    }
                }
                else
                {
                    goto Label0;
                }
            }while (encounterDeck.Cards.Count != 50);
            EncounterBuilder.FillDeck(encounterDeck);
            return(encounterDeck);
        }
Example #19
0
        public static EncounterDeck BuildDeck(int level, List <string> categories, List <string> keywords)
        {
            build_creature_list(level - 2, level + 5, categories, keywords, false);
            if (fCreatures.Count == 0)
            {
                return(null);
            }

            Dictionary <CardCategory, Pair <int, int> > role_breakdown = new Dictionary <CardCategory, Pair <int, int> >();

            role_breakdown[CardCategory.SoldierBrute] = new Pair <int, int>(0, 18);
            role_breakdown[CardCategory.Skirmisher]   = new Pair <int, int>(0, 14);
            role_breakdown[CardCategory.Minion]       = new Pair <int, int>(0, 5);
            role_breakdown[CardCategory.Artillery]    = new Pair <int, int>(0, 5);
            role_breakdown[CardCategory.Controller]   = new Pair <int, int>(0, 5);
            role_breakdown[CardCategory.Lurker]       = new Pair <int, int>(0, 2);
            role_breakdown[CardCategory.Solo]         = new Pair <int, int>(0, 1);

            Dictionary <Difficulty, Pair <int, int> > diff_breakdown = new Dictionary <Difficulty, Pair <int, int> >();

            if (level >= 3)
            {
                diff_breakdown[Difficulty.Trivial] = new Pair <int, int>(0, 7);
                diff_breakdown[Difficulty.Easy]    = new Pair <int, int>(0, 30);
            }
            else
            {
                diff_breakdown[Difficulty.Easy] = new Pair <int, int>(0, 37);
            }
            diff_breakdown[Difficulty.Moderate] = new Pair <int, int>(0, 8);
            diff_breakdown[Difficulty.Hard]     = new Pair <int, int>(0, 5);
            diff_breakdown[Difficulty.Extreme]  = new Pair <int, int>(0, 0);

            EncounterDeck deck = new EncounterDeck();

            deck.Level = level;

            int attempts = 0;

            while (attempts < TRIES)
            {
                attempts += 1;

                // Pick a card
                int           card_index = Session.Random.Next() % fCreatures.Count;
                EncounterCard card       = fCreatures[card_index];

                // Do we need a card of this type?
                CardCategory    cat         = card.Category;
                Pair <int, int> role_counts = role_breakdown[cat];
                bool            role_ok     = (role_counts.First < role_counts.Second);
                if (!role_ok)
                {
                    continue;
                }

                // Do we need a card of this level?
                Difficulty      diff        = card.GetDifficulty(level);
                Pair <int, int> diff_counts = diff_breakdown[diff];
                bool            level_ok    = (diff_counts.First < diff_counts.Second);
                if (!level_ok)
                {
                    continue;
                }

                // Add this card to the deck
                deck.Cards.Add(card);
                role_breakdown[cat].First  += 1;
                diff_breakdown[diff].First += 1;

                if (deck.Cards.Count == 50)
                {
                    break;
                }
            }

            FillDeck(deck);

            return(deck);
        }