From a4c65413da15237c1f7310abb099222aa44b47e7 Mon Sep 17 00:00:00 2001 From: Adam Goldsmith Date: Thu, 13 Jul 2017 23:21:58 -0400 Subject: [PATCH] Add villain support --- SotMDeckBuilder.py | 92 +- images/villain/card.svg | 1626 +++++++++++++++++++++++++++++++ images/villain/character.svg | 208 ++++ images/villain/instructions.svg | 916 +++++++++++++++++ 4 files changed, 2820 insertions(+), 22 deletions(-) create mode 100644 images/villain/card.svg create mode 100644 images/villain/character.svg create mode 100644 images/villain/instructions.svg diff --git a/SotMDeckBuilder.py b/SotMDeckBuilder.py index ed25fe4..a21f3cf 100755 --- a/SotMDeckBuilder.py +++ b/SotMDeckBuilder.py @@ -42,6 +42,10 @@ def makeSVG(base, properties): if "hp" not in properties: removeElement(tree, "hpMark") + # remove setup box if there is no setup + if "setup" not in properties: + removeElement(tree, "setupBox") + if "art" in properties: art = tree.find('.//*[@id="art"]') if art is not None: @@ -71,19 +75,41 @@ def makeFaces(deckJson, outfile): cardType = deckJson["type"] cardNum = 0 - # Make a card for each character card + # Make a card for each hero character card if cardType == "hero": for card in deckJson['character']: makeFace(baseImage, baseX, cardNum, os.path.join("images", cardType, "charFront.svg"), card) cardNum += 1 - makeFace(baseImage, baseX, cardNum, os.path.join("images", cardType, "charBack.svg"), card) cardNum += 1 - if cardType == "villain": - pass + # Make a character and instructions card for each villain card + elif cardType == "villain": + for card in deckJson['character']: + front = card["front"] + front["name"] = card["name"] + back = card["back"] + back["name"] = card["name"] + makeFace(baseImage, baseX, cardNum, + os.path.join("images", cardType, "character.svg"), + front) + cardNum += 1 + makeFace(baseImage, baseX, cardNum, + os.path.join("images", cardType, "character.svg"), + back) + cardNum += 1 + + makeFace(baseImage, baseX, cardNum, + os.path.join("images", cardType, "instructions.svg"), + front) + cardNum += 1 + makeFace(baseImage, baseX, cardNum, + os.path.join("images", cardType, "instructions.svg"), + back) + cardNum += 1 + # Make a card for each card for card in deckJson['deck']: @@ -94,6 +120,24 @@ def makeFaces(deckJson, outfile): baseImage.save(outfile + ".png", "PNG") return baseX +def makeCardJson(template, nickname, description, cardID): + card = template.copy() + card.update({"Nickname": nickname, + "Description": description, + "CardID": cardID}) + return card + +def makeDoubleSidedCardJson(template, nickname, descriptionFront, + descriptionBack, cardID): + cardBack = makeCardJson(template, nickname, descriptionBack, cardID + 1) + + card = template.copy() + card.update({"Nickname": nickname, + "Description": descriptionFront, + "CardID": cardID, + "States": {"2": cardBack}}) + return card + def makeJson(deckJson, imgWidth, outfile): with open(bundle_dir + "/templates/deck.json") as f: outJson = json.load(f) @@ -110,31 +154,35 @@ def makeJson(deckJson, imgWidth, outfile): # decks start at (10 * deck id) cardNum = 100 - for card in deckJson['character']: - outJson['ObjectStates'][0]['DeckIDs'].append(cardNum) - # add front card with back as second state - cardOutBack = cardTemplate.copy() - cardOutBack.update({"Nickname": card['name'], - "Description": "Incapacitated", - "CardID": cardNum + 1}) - cardOut = cardTemplate.copy() - cardOut.update({"Nickname": card['name'], - "Description": "Active", - "CardID": cardNum, - "States": {"2": cardOutBack}}) - outJson['ObjectStates'][0]['ContainedObjects'].append(cardOut) - cardNum += 2 + if deckJson["type"] == "hero": + for card in deckJson['character']: + outJson['ObjectStates'][0]['DeckIDs'].append(cardNum) + cardOut = makeDoubleSidedCardJson( + cardTemplate, card['name'], "Active", "Incapacitated", cardNum) + outJson['ObjectStates'][0]['ContainedObjects'].append(cardOut) + cardNum += 2 + + elif deckJson["type"] == "villain": + for card in deckJson['character']: + outJson['ObjectStates'][0]['DeckIDs'].append(cardNum) + cardOut = makeDoubleSidedCardJson( + cardTemplate, card['name'], "Front", "Back", cardNum) + outJson['ObjectStates'][0]['ContainedObjects'].append(cardOut) + cardNum += 2 + + outJson['ObjectStates'][0]['DeckIDs'].append(cardNum) + cardOut = makeDoubleSidedCardJson( + cardTemplate, card['name'] + " instructions", "Front", "Back", cardNum) + outJson['ObjectStates'][0]['ContainedObjects'].append(cardOut) + cardNum += 2 for card in deckJson['deck']: for i in range(0, card['count']): outJson['ObjectStates'][0]['DeckIDs'].append(cardNum) # add a card object thing for each card, and give it a name - cardOut = cardTemplate.copy() - cardOut.update({"Nickname": card['name'], - "Description": card.get('type', ""), - "CardID": cardNum}) + cardOut = makeCardJson(cardTemplate, card['name'], card.get('keywords', ""), cardNum) outJson['ObjectStates'][0]['ContainedObjects'].append(cardOut) cardNum += 1 diff --git a/images/villain/card.svg b/images/villain/card.svg new file mode 100644 index 0000000..f4f1dc0 --- /dev/null +++ b/images/villain/card.svg @@ -0,0 +1,1626 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "Type Quote Here!" + - Name, Comic # + Text Here Art By + Keywords + Header + + + + + + + + + + + + + + + + + + + 3 + + + diff --git a/images/villain/character.svg b/images/villain/character.svg new file mode 100644 index 0000000..e1af77a --- /dev/null +++ b/images/villain/character.svg @@ -0,0 +1,208 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + Villain Title + + + + + + + + + + art by + + + villain + + Villain Name + 000 + + diff --git a/images/villain/instructions.svg b/images/villain/instructions.svg new file mode 100644 index 0000000..c11234a --- /dev/null +++ b/images/villain/instructions.svg @@ -0,0 +1,916 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Villain Name + + Villain Title + + + art by + + Text Here + + + + + + + + + + Text Here + Text Here +