Updated build system.
This commit is contained in:
parent
805297554d
commit
05bb67851a
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -10,3 +10,5 @@ changelist.txt
|
|||
outputs/**
|
||||
Console.
|
||||
Python-Fu
|
||||
Makefile.deps
|
||||
generated/**
|
||||
|
|
67
Makefile
67
Makefile
|
@ -1,6 +1,9 @@
|
|||
.PHONY: all clean check printrun cardrun
|
||||
.PRECIOUS: %.pdf %.png
|
||||
|
||||
GENERATED_DIR?=generated
|
||||
SENTINEL=$(GENERATED_DIR)/.sentinel
|
||||
|
||||
default: check decks
|
||||
all: check decks export
|
||||
|
||||
|
@ -10,7 +13,7 @@ XELATEX:=$(shell command -v xelatex 2> /dev/null)
|
|||
PDFTOPPM:=$(shell command -v pdftoppm 2> /dev/null)
|
||||
PDFUNITE:=$(shell command -v pdfunite 2> /dev/null)
|
||||
|
||||
check:
|
||||
check: $(SENTINEL)
|
||||
ifndef CONVERT
|
||||
$(error "convert not found. Please install imagemagick")
|
||||
endif
|
||||
|
@ -24,26 +27,15 @@ ifndef PDFUNITE
|
|||
$(error "pdfunite not found. Please install poppler")
|
||||
endif
|
||||
|
||||
SHORT_DECKLIST=$(shell ls cards/decks | grep -v run | sed -e 's/.txt//')
|
||||
DECKLIST=$(SHORT_DECKLIST) printrun cardrun
|
||||
DEPENDLIST=$(DECKLIST:%=%.d)
|
||||
RAW_DECK_LIST=$(shell ./scripts/decklist.sh)
|
||||
DECK_LIST=$(RAW_DECK_LIST:%=$(GENERATED_DIR)/%)
|
||||
DECK_DEPENDENCIES=$(DECK_LIST:%=%.d)
|
||||
|
||||
outputs/printrun.txt: $(SHORT_DECKLIST)
|
||||
cat $^ | sort > $@
|
||||
$(SENTINEL): cards.sql
|
||||
./scripts/generate_cards.sh $(GENERATED_DIR)
|
||||
touch $@
|
||||
|
||||
outputs/cardrun.txt: $(SHORT_DECKLIST)
|
||||
cat $^ | sort -u > $@
|
||||
|
||||
outputs/%run.d: cards/decks/%run.txt
|
||||
echo -n 'outputs/$*run.pdf:' > $@
|
||||
tr '\n' ' ' < $< >> $@
|
||||
echo -e '\n\tpdfunite $$+ $$@' >> $@
|
||||
cat $< | sort | uniq -c | sed -e 's@\([[:digit:]]\+\) \(.\+/\)*\(.\+\).pdf@export: outputs/$*run/\3[\1].png@' >> $@
|
||||
cat $< | sort | uniq -c | sed -e 's@\([[:digit:]]\+\) \(.\+/\)*\(.\+\).pdf@outputs/$*run/\3[\1].png: \2\3[\1].png; cp \2\3[\1].png outputs/$*run/\3[\1].png@' >> $@
|
||||
mkdir -p outputs/$*run
|
||||
echo 'decks: outputs/$*run.pdf' >> $@
|
||||
|
||||
outputs/%.d: cards/decks/%.txt
|
||||
%.d: %.list
|
||||
echo -n 'outputs/$*.pdf:' > $@
|
||||
tr '\n' ' ' < $< >> $@
|
||||
echo -e '\n\tpdfunite $$+ $$@' >> $@
|
||||
|
@ -51,9 +43,11 @@ outputs/%.d: cards/decks/%.txt
|
|||
cat $< | sort | uniq -c | sed -e 's@\([[:digit:]]\+\) \(.\+/\)*\(.\+\).pdf@outputs/$*/\3[\1].png: \2\3[\1].png; cp \2\3[\1].png outputs/$*/\3[\1].png@' >> $@
|
||||
mkdir -p outputs/$*
|
||||
echo 'decks: outputs/$*.pdf' >> $@
|
||||
echo 'short: outputs/$*.pdf' >> $@
|
||||
|
||||
include $(DECKLIST:%=outputs/%.d)
|
||||
Makefile.deps: $(DECK_DEPENDENCIES) $(SENTINEL)
|
||||
cat $^ > $@
|
||||
|
||||
-include Makefile.deps
|
||||
|
||||
outputs/iditaboard[face].png: iditaboard.pdf
|
||||
$(PDFTOPPM) -scale-to-x 4875 -scale-to-y 3075 -png $< > $@
|
||||
|
@ -61,44 +55,16 @@ outputs/iditaboard[face].png: iditaboard.pdf
|
|||
outputs/cardback.png: cardback.png
|
||||
cp $< $@
|
||||
|
||||
outputs/stretchback1.png: cardback.png
|
||||
convert $< -fuzz 50% -fill \#7FDF7D -opaque white tmp.png
|
||||
convert tmp.png -fuzz 50% -fill \#CF5FCF -opaque black $@
|
||||
rm tmp.png
|
||||
|
||||
outputs/stretchback2.png: cardback.png
|
||||
convert $< -fuzz 50% -fill \#9FB76F -opaque white tmp.png
|
||||
convert tmp.png -fuzz 50% -fill \#FF5F5F -opaque black $@
|
||||
rm tmp.png
|
||||
|
||||
outputs/stretchback3.png: cardback.png
|
||||
convert $< -fuzz 50% -fill \#5F5FFF -opaque white tmp.png
|
||||
convert tmp.png -fuzz 50% -fill \#9F9F9F -opaque black $@
|
||||
rm tmp.png
|
||||
|
||||
outputs/stretchback4.png: cardback.png
|
||||
convert $< -fuzz 50% -fill \#3FDFDF -opaque white tmp.png
|
||||
convert tmp.png -fuzz 50% -fill \#DFDF3F -opaque black $@
|
||||
rm tmp.png
|
||||
|
||||
outputs/box[top].png: box_top.png
|
||||
cp $< $@
|
||||
|
||||
outputs/box[bottom].png: box_bottom.png
|
||||
cp $< $@
|
||||
|
||||
export: outputs/stretchback1.png outputs/stretchback2.png outputs/stretchback3.png outputs/stretchback4.png
|
||||
export: outputs/cardback.png
|
||||
export: outputs/box[top].png outputs/box[bottom].png
|
||||
export: outputs/iditaboard[face].png
|
||||
export: instructions.pdf
|
||||
|
||||
%.pdf: %.tex
|
||||
$(XELATEX) -interaction=batchmode -halt-on-error --shell-escape --output-directory=$(@D) $<
|
||||
echo "$@" >> changelist.txt
|
||||
rm $*.aux
|
||||
rm $*.log
|
||||
|
||||
# TODO: Clean this up!
|
||||
instructions.pdf: instructions.tex cards/dogs/husky0.pdf cards/attachments/armour0.pdf cards/food/breakfast0.pdf cards/food/lunch0.pdf cards/sleds/repair_sled0.pdf cards/sleds/upgrade_sled0.pdf cards/movement/move0.pdf cards/food/dinner0.pdf cards/personal/first_aid0.pdf cards/dogs/good_dog0.pdf cards/util/vigilance.pdf cards/damaged.pdf cards/util/daylight_savings_time.pdf cards/util/sleeping_bag.pdf cards/sleds/new_sled.pdf cards/sleds/stop_and_shop.pdf cards/sleds/satiated.pdf cards/personal/ibuprofin.pdf cards/util/utility_knife.pdf
|
||||
$(XELATEX) -interaction=batchmode -halt-on-error --shell-escape --output-directory=$(@D) $<
|
||||
$(XELATEX) -interaction=batchmode -halt-on-error --shell-escape --output-directory=$(@D) $< # Twice, for TOC
|
||||
|
@ -114,6 +80,7 @@ clean:
|
|||
-find outputs -name '*.d' -delete
|
||||
-find . -name '*.aux' -delete
|
||||
-find . -name '*.log' -delete
|
||||
-rm -rf $(GENERATED_DIR)
|
||||
|
||||
print-% : ; @echo $* = $($*)
|
||||
|
||||
|
|
32
cards.sql
32
cards.sql
|
@ -1,24 +1,24 @@
|
|||
PRAGMA foreign_keys=OFF;
|
||||
BEGIN TRANSACTION;
|
||||
CREATE TABLE Types (id INTEGER PRIMARY KEY, Name TEXT);
|
||||
INSERT INTO Types VALUES(1,'Attachment');
|
||||
INSERT INTO Types VALUES(2,'Dog');
|
||||
INSERT INTO Types VALUES(3,'Food');
|
||||
INSERT INTO Types VALUES(4,'Movement');
|
||||
INSERT INTO Types VALUES(5,'Personal');
|
||||
INSERT INTO Types VALUES(6,'Sled');
|
||||
INSERT INTO Types VALUES(7,'Utility');
|
||||
INSERT INTO Types VALUES(8,'Token');
|
||||
INSERT INTO Types VALUES(1,'attachment');
|
||||
INSERT INTO Types VALUES(2,'dog');
|
||||
INSERT INTO Types VALUES(3,'food');
|
||||
INSERT INTO Types VALUES(4,'movement');
|
||||
INSERT INTO Types VALUES(5,'personal');
|
||||
INSERT INTO Types VALUES(6,'sled');
|
||||
INSERT INTO Types VALUES(7,'utility');
|
||||
INSERT INTO Types VALUES(8,'damage');
|
||||
|
||||
CREATE TABLE Decks (id INTEGER PRIMARY KEY, Name TEXT);
|
||||
INSERT INTO Decks VALUES(1,'Starter1');
|
||||
INSERT INTO Decks VALUES(2,'Starter2');
|
||||
INSERT INTO Decks VALUES(3,'Starter3');
|
||||
INSERT INTO Decks VALUES(4,'Starter4');
|
||||
INSERT INTO Decks VALUES(10,'Survival');
|
||||
INSERT INTO Decks VALUES(11,'Race');
|
||||
INSERT INTO Decks VALUES(20,'Legendary');
|
||||
INSERT INTO Decks VALUES(21,'Damage');
|
||||
INSERT INTO Decks VALUES(1,'starter1');
|
||||
INSERT INTO Decks VALUES(2,'starter2');
|
||||
INSERT INTO Decks VALUES(3,'starter3');
|
||||
INSERT INTO Decks VALUES(4,'starter4');
|
||||
INSERT INTO Decks VALUES(10,'survival');
|
||||
INSERT INTO Decks VALUES(11,'race');
|
||||
INSERT INTO Decks VALUES(20,'legendary');
|
||||
INSERT INTO Decks VALUES(21,'damage');
|
||||
|
||||
CREATE TABLE Effects (id INTEGER PRIMARY KEY, Name TEXT, Command TEXT);
|
||||
INSERT INTO Effects VALUES(1,'Day Draw','\daydraw{#}');
|
||||
|
|
|
@ -5,14 +5,5 @@ OUTPUT=$1
|
|||
INTERMEDIATE=$(echo "$1" | sed 's/\[.*\]\..*//')-raw.png
|
||||
PDFNAME=$(echo "$1" | sed 's/\[.*\]\..*//').pdf
|
||||
|
||||
# Determine card size
|
||||
#if grep -q 750x1050 <<<$(identify $INTERMEDIATE); then
|
||||
if [ "${PDFNAME/stretch}" = "$PDFNAME" ]; then
|
||||
# Poker Deck
|
||||
pdftoppm -scale-to-x 750 -scale-to-y 1050 -png $PDFNAME > $INTERMEDIATE
|
||||
convert $INTERMEDIATE -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage $OUTPUT
|
||||
else
|
||||
# Mini Deck
|
||||
pdftoppm -scale-to-x 750 -scale-to-y 525 -png $PDFNAME > $INTERMEDIATE
|
||||
convert $INTERMEDIATE -set option:distort:viewport 825x600-37-37 -virtual-pixel Edge -distort SRT 0 +repage $OUTPUT
|
||||
fi
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 328 B |
5
scripts/decklist.sh
Executable file
5
scripts/decklist.sh
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
sqlite3 -init cards.sql <<EOF | sed 's/ /_/g'
|
||||
SELECT Name FROM Decks JOIN Deck_Cards ON Deck_Cards.Deck = Decks.id GROUP BY Name;
|
||||
EOF
|
46
scripts/generate_cards.sh
Executable file
46
scripts/generate_cards.sh
Executable file
|
@ -0,0 +1,46 @@
|
|||
#!/bin/bash
|
||||
|
||||
PARENT_DIR="${1:-cards}"
|
||||
|
||||
mkdir -p "$PARENT_DIR"
|
||||
|
||||
sqlite3 -init cards.sql < scripts/list_cards.sql | \
|
||||
while IFS="|" read -r name energy health risk flavour image typename effects deckname cardcount; do
|
||||
case $cardcount in
|
||||
1) rarity=legendary ;;
|
||||
2) rarity=epic ;;
|
||||
3) rarity=rare ;;
|
||||
4) rarity=common ;;
|
||||
*) rarity=starting ;;
|
||||
esac
|
||||
|
||||
mkdir -p "$PARENT_DIR/$deckname"
|
||||
fname="$PARENT_DIR/$deckname/${name// /_}.tex"
|
||||
|
||||
yes "${fname%.tex}.pdf" | head -n "$cardcount" >> "$PARENT_DIR/$deckname.list"
|
||||
|
||||
cat <<EOF >"$fname"
|
||||
\\documentclass{iditacard}
|
||||
|
||||
\\cardtype{$typename}
|
||||
\\rarity{$rarity}
|
||||
\\deck{$deckname}
|
||||
|
||||
\\begin{document}
|
||||
\\begin{card}
|
||||
\\art{$image}
|
||||
EOF
|
||||
|
||||
[ "$energy" -gt 0 ] || echo " \\energy{$energy}" >>"$fname"
|
||||
[ "$health" -gt 0 ] || echo " \\health{$health}" >>"$fname"
|
||||
[ "$risk" -gt 0 ] || echo " \\risk{$risk}" >>"$fname"
|
||||
|
||||
cat <<EOF >>"$fname"
|
||||
\\name{$name}
|
||||
\\text{$effects}
|
||||
\\flava{$flavour}
|
||||
\\type{$typename}
|
||||
\\end{card}
|
||||
\\end{document}
|
||||
EOF
|
||||
done
|
21
scripts/list_cards.sql
Normal file
21
scripts/list_cards.sql
Normal file
|
@ -0,0 +1,21 @@
|
|||
SELECT
|
||||
Cards.Name,
|
||||
Cards.Energy,
|
||||
Cards.Health,
|
||||
Cards.Risk,
|
||||
Cards.Flavour,
|
||||
Cards.Image,
|
||||
Types.Name,
|
||||
group_concat(Effects.Command, '\\'),
|
||||
Decks.Name,
|
||||
Deck_Cards.Amount
|
||||
FROM Cards
|
||||
JOIN Types ON Types.id = Cards.Type
|
||||
CROSS JOIN Card_Effects ON Card_Effects.Card = Cards.id
|
||||
JOIN Effects ON Effects.id = Card_Effects.Effect
|
||||
CROSS JOIN Deck_Cards ON Deck_Cards.Card = Cards.id
|
||||
JOIN Decks ON Deck_Cards.Deck = Decks.id
|
||||
GROUP BY
|
||||
Cards.id,
|
||||
Decks.id
|
||||
ORDER BY Cards.Name;
|
Loading…
Reference in a new issue