Skip to content

Commit a6bb74a

Browse files
committed
Support fortress in Mission deck.
1 parent a6a0a99 commit a6bb74a

6 files changed

Lines changed: 43 additions & 37 deletions

File tree

deck.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -401,10 +401,11 @@ std::string Deck::long_description() const
401401
show_upgrades(ios, card, card->m_top_level_card->m_level, " ");
402402
}
403403
}
404-
for (const Card * fort: fort_cards)
404+
for (const Card * card: fort_cards)
405405
{
406-
ios << card_description(all_cards, fort) << "\n";
406+
show_upgrades(ios, card, card->m_top_level_card->m_level, "");
407407
}
408+
ios << "\n";
408409
return ios.str();
409410
}
410411

@@ -511,6 +512,8 @@ const Card* Deck::upgrade_card(const Card* card, unsigned card_max_level, std::m
511512
void Deck::shuffle(std::mt19937& re)
512513
{
513514
shuffled_commander = commander;
515+
shuffled_forts.clear();
516+
boost::insert(shuffled_forts, shuffled_forts.end(), fort_cards);
514517
shuffled_cards.clear();
515518
boost::insert(shuffled_cards, shuffled_cards.end(), cards);
516519
if(!variable_cards.empty())
@@ -537,6 +540,10 @@ void Deck::shuffle(std::mt19937& re)
537540
unsigned remaining_upgrade_points = upgrade_points;
538541
unsigned remaining_upgrade_opportunities = upgrade_opportunities;
539542
shuffled_commander = upgrade_card(commander, commander_max_level, re, remaining_upgrade_points, remaining_upgrade_opportunities);
543+
for (auto && card: shuffled_forts)
544+
{
545+
card = upgrade_card(card, card->m_top_level_card->m_level, re, remaining_upgrade_points, remaining_upgrade_opportunities);
546+
}
540547
for (auto && card: shuffled_cards)
541548
{
542549
card = upgrade_card(card, card->m_top_level_card->m_level, re, remaining_upgrade_points, remaining_upgrade_opportunities);

deck.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class Deck
5656
std::map<signed, char> card_marks; // <positions of card, prefix mark>: -1 indicating the commander. E.g, used as a mark to be kept in attacking deck when optimizing.
5757

5858
const Card* shuffled_commander;
59+
std::deque<const Card*> shuffled_forts;
5960
std::deque<const Card*> shuffled_cards;
6061

6162
// card id -> card order

sim.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ Results<uint64_t> play(Field* fd)
466466
// Play fortresses
467467
for (unsigned _ = 0; _ < 2; ++ _)
468468
{
469-
for (const Card* played_card: fd->tap->deck->fort_cards)
469+
for (const Card* played_card: fd->tap->deck->shuffled_forts)
470470
{
471471
PlayCard(played_card, fd).op<CardType::structure>();
472472
}

tyrant.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef TYRANT_H_INCLUDED
22
#define TYRANT_H_INCLUDED
33

4-
#define TYRANT_OPTIMIZER_VERSION "2.14.2"
4+
#define TYRANT_OPTIMIZER_VERSION "2.15.0"
55

66
#include <string>
77
#include <sstream>

tyrant_optimize.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1509,7 +1509,7 @@ int main(int argc, char** argv)
15091509
Cards all_cards;
15101510
Decks decks;
15111511
load_skills_set_xml(all_cards, "data/skills_set.xml", true);
1512-
for (unsigned section = 1; section <= 9; ++ section)
1512+
for (unsigned section = 1; section <= 10; ++ section)
15131513
{
15141514
load_cards_xml(all_cards, "data/cards_section_" + to_string(section) + ".xml", false);
15151515
}

xml.cpp

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -151,39 +151,24 @@ void parse_card_node(Cards& all_cards, Card* card, xml_node<>* card_node)
151151
if (cost_node) { card->m_delay = atoi(cost_node->value()); }
152152
if (id_node)
153153
{
154-
if (cost_node)
155-
{
156-
if (attack_node)
157-
{
158-
if (card->m_attack == 0)
159-
{
160-
if (card->m_id < 1000)
161-
{ card->m_type = CardType::assault; }
162-
else if (card->m_id < 2000)
163-
{ card->m_type = CardType::commander; }
164-
else if (card->m_id < 3000)
165-
{ card->m_type = CardType::structure; }
166-
else if (card->m_id < 8000)
167-
{ card->m_type = CardType::assault; }
168-
else if (card->m_id < 10000)
169-
{ card->m_type = CardType::structure; }
170-
else if (card->m_id < 17000)
171-
{ card->m_type = CardType::assault; }
172-
else if (card->m_id < 25000)
173-
{ card->m_type = CardType::structure; }
174-
else if (card->m_id < 30000)
175-
{ card->m_type = CardType::commander; }
176-
else
177-
{ card->m_type = CardType::assault; }
178-
}
179-
else // attack > 0: must be assault
180-
{ card->m_type = CardType::assault; }
181-
}
182-
else // no attack_node: must be structure
183-
{ card->m_type = CardType::structure; }
184-
}
185-
else // no cost_node: must be commander
154+
if (card->m_id < 1000)
155+
{ card->m_type = CardType::assault; }
156+
else if (card->m_id < 2000)
157+
{ card->m_type = CardType::commander; }
158+
else if (card->m_id < 3000)
159+
{ card->m_type = CardType::structure; }
160+
else if (card->m_id < 8000)
161+
{ card->m_type = CardType::assault; }
162+
else if (card->m_id < 10000)
163+
{ card->m_type = CardType::structure; }
164+
else if (card->m_id < 17000)
165+
{ card->m_type = CardType::assault; }
166+
else if (card->m_id < 25000)
167+
{ card->m_type = CardType::structure; }
168+
else if (card->m_id < 30000)
186169
{ card->m_type = CardType::commander; }
170+
else
171+
{ card->m_type = CardType::assault; }
187172
}
188173
if(rarity_node) { card->m_rarity = atoi(rarity_node->value()); }
189174
if(type_node) { card->m_faction = static_cast<Faction>(atoi(type_node->value())); }
@@ -287,6 +272,15 @@ Deck* read_deck(Decks& decks, const Cards& all_cards, xml_node<>* node, DeckType
287272
xml_node<>* commander_max_level_node(node->first_node("commander_max_level"));
288273
unsigned commander_max_level = commander_max_level_node ? atoi(commander_max_level_node->value()) : commander_card->m_top_level_card->m_level;
289274
unsigned upgrade_opportunities = commander_max_level - card->m_level;
275+
std::vector<const Card*> fort_cards;
276+
for (xml_node<>* fortress_card_node = node->first_node("fortress_card");
277+
fortress_card_node;
278+
fortress_card_node = fortress_card_node->next_sibling("fortress_card"))
279+
{
280+
const Card * card = all_cards.by_id(atoi(fortress_card_node->first_attribute("id")->value()));
281+
fort_cards.push_back(card);
282+
upgrade_opportunities += card->m_top_level_card->m_level - card->m_level;
283+
}
290284
std::vector<const Card*> always_cards;
291285
std::vector<std::tuple<unsigned, unsigned, std::vector<const Card*>>> some_cards;
292286
xml_node<>* deck_node(node->first_node("deck"));
@@ -329,19 +323,23 @@ Deck* read_deck(Decks& decks, const Cards& all_cards, xml_node<>* node, DeckType
329323
decks.decks.push_back(Deck{all_cards, decktype, id, deck_name, (upgrade_opportunities + 1) * (level - 1) / (max_level - 1), upgrade_opportunities});
330324
Deck* deck = &decks.decks.back();
331325
deck->set(commander_card, commander_max_level, always_cards, some_cards, mission_req);
326+
deck->fort_cards = fort_cards;
332327
decks.add_deck(deck, deck_name);
333328
decks.add_deck(deck, decktype_names[decktype] + " #" + to_string(id) + "-" + to_string(level));
334329
}
335330

336331
decks.decks.push_back(Deck{all_cards, decktype, id, base_deck_name});
337332
Deck* deck = &decks.decks.back();
338333
deck->set(commander_card, commander_max_level, always_cards, some_cards, mission_req);
334+
deck->fort_cards = fort_cards;
339335

340336
// upgrade cards for full-level missions/raids
341337
if (max_level > 1)
342338
{
343339
while (deck->commander->m_level < commander_max_level)
344340
{ deck->commander = deck->commander->upgraded(); }
341+
for (auto && card: deck->fort_cards)
342+
{ card = card->m_top_level_card; }
345343
for (auto && card: deck->cards)
346344
{ card = card->m_top_level_card; }
347345
for (auto && pool: deck->variable_cards)

0 commit comments

Comments
 (0)