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(); } }
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; }
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); }
private void BuildTestDeck() { var encounterStore = FindObjectOfType <EncounterStore>(); var testEncounters = encounterStore.GetTestEncounters(); _usedEncounters = new List <Encounter>(); _testDeck = new EncounterDeck(testEncounters, testEncounters.Count, _usedEncounters); _testDeck.Shuffle(); }
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); } }
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(); }
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); }
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(); } }
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); } } }
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; }
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(); } }
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); } } }
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); } }
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); } }
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(); } }
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(); } }
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(); }
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); }
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); }