iditacards/cards.cue

100 lines
2.1 KiB
CUE

// 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] {
"\(deckname)-\(cardname)[\(freq.count)]": {
size: "750x1050"
print: "-set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage"
depends: {
assets: [
"deck/\(deckname)",
"card/\(card.image)",
]
files: [
"iditacard.cls",
]
}
kind: "template"
template: "card.tex"
data: cards[cardname] & {
rarity: freq.rarity
deck: deckname
}
}
}
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) {
"\(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) {
"\(deckname)-\(cardname)[\(card.count)]"
}
},
]
}
}