// Iditacards card and deck asset specification package iditacards import "list" #CardType: "attachment" | "dog" | "food" | "movement" | "personal" | "sled" | "damage" #UnaryEffect: "see" | "destroy" | "supply" | "take" | "speed" | "draw" | "daydraw" | "move" | "damage" #NilaryEffect: "immortal" | "safepass" | "inplayatstart" | "discardonkill" | "nohypothermia" | "doubledistance" | "passdie" | "nohold" | "damagetext" // the template for a card gets this #Card: { name: string type: #CardType costs: { energy: uint | *0 | "ALL" health: uint | *0 | "ALL" risk: uint | *0 | "ALL" } // effects: [#NAryEffect]: {} | null | int | "ALL" | =~"x[0-9]+" effects: [#UnaryEffect]: int | "ALL" | =~"x[0-9]+" effects: [#NilaryEffect]: {} | null flavour: string image: string rarity?: #Rarity deck?: string } cards: [string]: #Card #Rarity: "info" | "starting" | "common" | "rare" | "epic" | "legendary" decks: [string]: [Name=_]: { rarity: #Rarity count: int } assets: { for deckname, deck in decks for cardname, freq in deck let card = cards[cardname] { "cards/\(deckname)-\(cardname)[\(freq.count)]": { size: "750x1050" print: "-set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage" kind: "template" template: "card.tex" data: cards[cardname] & { rarity: freq.rarity deck: deckname } } } if false { for deckname, deck in decks for cardname, freq in deck let card = cards[cardname] { "card/\(cardname)": { kind: "image" source: "images/card/\(cardname).png" } } } } pseudoassets: { for deckname, deck in decks { "\(deckname)-deck": { kind: "cat" contents: [ for cardname, freq in deck for idx in list.Range(0, freq.count, 1) { "cards/\(deckname)-\(cardname)[\(freq.count)]" }, ] } } cardrun: { kind: "cat" contents: [ for deckname, deck in decks for cardname, card in deck { for idx in list.Range(0, card.count, 1) { "cards/\(deckname)-\(cardname)[\(card.count)]" } }, ] } }