2013-11-09 17:57:06 -08:00
MIN_MEM = 256M
MAX_MEM = 512M
2015-02-24 17:23:13 -08:00
MAG := release/Magarena.jar
EXE := release/Magarena.exe
JAR := release/Magarena.jar
2014-07-21 20:57:01 -07:00
JAVA = java -Xms$( MIN_MEM) -Xmx$( MAX_MEM) -noverify
2013-05-26 23:02:30 -07:00
DEBUG = $( JAVA) -ea
2014-05-05 19:28:41 -07:00
LIBS = .:lib/annotations.jar:lib/jsr305.jar:release/lib/groovy-all-*.jar
2015-02-24 17:23:13 -08:00
RUN = $( JAVA) -Dcom.sun.management.jmxremote -cp $( LIBS) :$( MAG)
2011-06-09 01:23:52 -07:00
SHELL = /bin/bash
2011-05-24 20:10:09 -07:00
BUILD = build
2015-04-19 08:09:50 -07:00
SRC = $( shell find src -iname "*.java" )
2013-07-16 22:31:42 -07:00
NO_OUTPUT := awk 'BEGIN{RS="\a"}{print; exit 1}'
2011-05-22 19:23:49 -07:00
2013-02-18 01:20:00 -08:00
all : tags $( MAG ) $( EXE )
2011-05-22 19:52:01 -07:00
2012-02-23 21:50:24 -08:00
zips :
2012-02-23 21:59:40 -08:00
make M` grep Release release/README.txt | head -1 | cut -d' ' -f2`
2012-02-23 21:50:24 -08:00
2011-11-15 18:11:34 -08:00
cards_diff : $( MAG )
2011-11-15 18:21:14 -08:00
for i in ` hg stat -q src/magic/card release/Magarena/scripts | cut -d' ' -f2 | sort -t'/' -k4` ; do hg diff $$ i; done | flip -u - > $@
2011-11-15 18:11:34 -08:00
2012-10-14 07:43:04 -07:00
findbugs_warnings.txt : $( MAG )
2012-06-12 23:35:26 -07:00
~/App/findbugs/bin/findbugs \
2011-08-30 21:40:36 -07:00
-textui \
-progress \
-sortByClass \
-emacs \
-effort:max \
-output $@ \
-sourcepath src \
build
2012-10-14 07:43:04 -07:00
build_warnings.txt :
make clean all > $@
2014-11-29 19:28:17 -08:00
FILTER_DECKBOX := grep deckbox.org/mtg | grep -o ">[A-Z].*<" | sed 's/^>//;s/<$$//'
2014-05-30 07:34:53 -07:00
2013-09-28 07:20:57 -07:00
cards/standard_all.out :
2012-08-19 08:04:51 -07:00
touch $@
2014-07-26 20:13:21 -07:00
$( eval PAGES := $( shell curl http://deckbox.org/games/mtg/cards?f= b31 | grep -o "1 of [0-9]\+" | sed 's/1 of //' | head -1) )
echo processing ${ PAGES } pages
seq ${ PAGES } | parallel -q -j 20 -k wget "http://deckbox.org/games/mtg/cards?f=b31&p={}" -O - | ${ FILTER_DECKBOX } >> $@
2013-09-28 07:20:57 -07:00
cards/modern_all.out :
touch $@
2014-07-26 20:13:21 -07:00
$( eval PAGES := $( shell curl http://deckbox.org/games/mtg/cards?f= b35 | grep -o "1 of [0-9]\+" | sed 's/1 of //' | head -1) )
echo processing ${ PAGES } pages
seq ${ PAGES } | parallel -q -j 20 -k wget "http://deckbox.org/games/mtg/cards?f=b35&p={}" -O - | ${ FILTER_DECKBOX } >> $@
2011-06-09 01:23:52 -07:00
2012-08-23 06:31:54 -07:00
cards/%_all.txt : cards /%_all .out
2014-05-30 07:34:53 -07:00
cat $^ | sort | uniq | sed 's/Aether/Æther/' > $@
2011-06-09 01:23:52 -07:00
2014-10-29 20:48:31 -07:00
cards/new.txt : cards /existing_master .txt
2014-10-29 20:28:57 -07:00
$( eval LAST := $( shell git tag | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -1 | cut -d' ' -f1) )
2012-10-27 02:17:53 -07:00
make cards/new_$( LAST) .txt
mv cards/new_$( LAST) .txt $@
2014-10-31 19:08:25 -07:00
make wiki/UpcomingCards.md
2012-10-27 02:17:53 -07:00
2014-03-29 04:43:45 -07:00
cards/fmt.txt : cards /new .txt
2014-06-28 04:49:20 -07:00
cat $^ | tr " " "@" | tr "\n" "#" | sed 's/#/, /g' | sed 's/, $$//' | fmt | sed 's/@/ /g' > $@
2014-03-29 04:43:45 -07:00
2013-07-27 02:37:50 -07:00
changelog :
2014-10-29 20:56:55 -07:00
$( eval LAST := $( shell git tag | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -1 | cut -d' ' -f1) )
git log ${ LAST } ..master > changelog
2013-07-27 02:37:50 -07:00
2013-08-29 07:23:48 -07:00
people : changelog
2014-10-29 20:58:04 -07:00
grep Author: $^ | sed 's/Author:[ ]*//;s/ <.*>//' | sort | uniq | sort > $@
2013-08-29 07:23:48 -07:00
2014-10-29 20:48:31 -07:00
cards/new_%.txt : cards /existing_master .txt cards /existing_ %.txt
2012-06-12 20:27:08 -07:00
join -v1 -t"|" <( sort $( word 1,$^) ) <( sort $( word 2,$^) ) > $@
cards/new_scripts_%.txt : release /Magarena /scripts
2012-05-22 20:56:17 -07:00
grep "name=" -h $$ ( hg diff -r $* | grep -B 1 "^--- /dev/null" | grep $^ | cut -d' ' -f4) | sed 's/name=//' > $@
2012-05-22 20:48:40 -07:00
flip -u $@
2011-09-08 00:36:24 -07:00
2012-07-01 05:10:50 -07:00
cards/existing_scripts_%.txt : $( wildcard release /Magarena /scripts /*.txt )
2014-10-29 20:48:31 -07:00
git show $* :release/Magarena/scripts \
| grep ".txt" \
| sed 's/^/$*:release\/Magarena\/scripts\//' \
| git cat-file --batch \
| grep "name=" \
| sed 's/.*name=//' \
| sort > $@
2012-01-27 18:49:19 -08:00
sed -i 's/\r//' $@
2011-06-02 00:03:14 -07:00
2012-07-01 05:10:50 -07:00
cards/existing_tokens_%.txt : $( wildcard release /Magarena /scripts /*.txt )
2014-10-29 20:48:31 -07:00
git show $* :release/Magarena/scripts \
| grep ".txt" \
| sed 's/^/$*:release\/Magarena\/scripts\//' \
| git cat-file --batch \
| awk -f scripts/extract_token_name.awk | sort > $@
2011-11-22 21:12:47 -08:00
2014-04-29 22:08:48 -07:00
cards/existing_code.txt : cards /groovy .txt
cp cards/groovy.txt $@
2012-07-01 05:10:50 -07:00
cards/existing_%.txt : cards /existing_scripts_ %.txt cards /existing_tokens_ %.txt
2011-11-22 21:12:47 -08:00
join -v1 -t"|" <( sort $( word 1,$^) ) <( sort $( word 2,$^) ) > $@
2014-04-29 22:08:48 -07:00
cards/groovy.txt : $( wildcard release /Magarena /scripts /*.txt )
2013-11-01 02:21:58 -07:00
grep -ho "name=.*" ` grep requires_groovy_code -lr release/Magarena/scripts` | sed 's/name=//' | sort > $@
2016-01-19 23:27:21 -08:00
cards/non-groovy.txt : $( wildcard release /Magarena /scripts /*.txt )
grep -ho "name=.*" ` grep requires_groovy_code -L release/Magarena/scripts/*.txt` | sed 's/name=//' | sort > $@
2013-11-01 02:21:58 -07:00
%_full.txt : scripts /extract_candidates .awk %.txt cards /groovy .txt cards /mtg -data .txt
2012-10-11 19:43:16 -07:00
awk -f $^ | sed 's/\t/\n/g' > $@
2011-06-02 00:03:14 -07:00
2012-10-07 22:55:29 -07:00
cards/candidates_full.txt : scripts /extract_candidates .awk cards /scored_by_dec .tsv cards /unimplementable .tsv cards /mtg -data .txt
2011-06-02 19:29:35 -07:00
awk -f $^ | sort -rg | sed 's/\t/\n/g' > $@
2013-05-10 21:44:48 -07:00
cards/unimplementable.tsv.add : cards /candidates_full .txt
2012-10-07 23:19:48 -07:00
grep "|" $^ | sed 's/NAME://;s/|/\t/' >> $( basename $@ )
2013-05-10 21:44:48 -07:00
make $^
2012-10-07 23:19:48 -07:00
2016-06-21 03:29:30 -07:00
cards/staples.txt :
curl \
2016-08-16 01:09:38 -07:00
https://www.mtggoldfish.com/format-staples/standard/full/creatures \
https://www.mtggoldfish.com/format-staples/standard/full/lands \
https://www.mtggoldfish.com/format-staples/standard/full/spells \
https://www.mtggoldfish.com/format-staples/modern/full/creatures \
https://www.mtggoldfish.com/format-staples/modern/full/lands \
https://www.mtggoldfish.com/format-staples/modern/full/spells \
https://www.mtggoldfish.com/format-staples/pauper/full/creatures \
https://www.mtggoldfish.com/format-staples/pauper/full/lands \
https://www.mtggoldfish.com/format-staples/pauper/full/spells \
https://www.mtggoldfish.com/format-staples/legacy/full/creatures \
https://www.mtggoldfish.com/format-staples/legacy/full/lands \
https://www.mtggoldfish.com/format-staples/legacy/full/spells \
https://www.mtggoldfish.com/format-staples/vintage/full/creatures \
https://www.mtggoldfish.com/format-staples/vintage/full/lands \
https://www.mtggoldfish.com/format-staples/vintage/full/spells \
2016-06-21 03:29:30 -07:00
| pup ".col-card a text{}" | sed "s/'/'/g;s/ (.*)//g" | sort | uniq > $@
2016-08-16 01:09:38 -07:00
cards/unknown.txt :
grep name = ` grep "status=" -Lr release/Magarena/scripts_missing` -h | sed 's/name=//' | sort > $@
2016-08-17 06:52:47 -07:00
cards/unknown_oracle.txt :
grep oracle = ` grep -L status = -r release/Magarena/scripts_missing` | sed 's/oracle=/\n/;s/release/\nrelease/' > $@
2016-08-16 01:09:38 -07:00
cards/staples_unknown.txt : cards /staples .txt cards /unknown .txt
join -t"|" <( sort $( word 1,$^) ) <( sort $( word 2,$^) ) > $@
2011-06-06 20:19:30 -07:00
%.out : $( MAG )
2011-06-10 23:03:02 -07:00
SGE_TASK_ID = $* exp/eval_mcts.sh
2012-08-25 07:09:10 -07:00
2016-09-09 18:07:29 -07:00
release/Magarena/themes/felt_theme.zip :
2016-09-09 20:00:47 -07:00
-mkdir release/Magarena/themes
2014-10-19 17:23:25 -07:00
wget https://github.com/magarena/magarena-themes/releases/download/1.0/felt_theme.zip -O $@
2016-09-09 20:00:47 -07:00
M1.% : clean $( EXE ) release /Magarena /themes /felt_theme .zip
2012-01-27 18:26:56 -08:00
grep " VERSION.*1. $* " -Ir src/
2011-09-08 00:36:24 -07:00
grep " Release.*1. $* " release/README.txt
2012-01-27 18:26:56 -08:00
grep 1.$* -Ir Magarena.app/
2011-05-29 18:51:10 -07:00
-rm -rf Magarena-1.$*
2011-10-28 05:27:43 -07:00
-rm -rf Magarena-1.$* .app
2011-05-29 18:51:10 -07:00
-rm Magarena-1.$* .zip
2011-11-25 21:55:03 -08:00
-rm Magarena-1.$* .app.zip
2013-09-28 22:59:47 -07:00
echo "preparing Lin/Win dist"
2016-09-09 21:12:39 -07:00
mkdir Magarena-1.$*
2013-01-05 22:20:50 -08:00
cp -r \
2011-05-27 00:34:47 -07:00
release/gpl-3.0.html \
2015-07-01 21:57:07 -07:00
release/Magarena.jar \
2011-05-27 00:34:47 -07:00
release/Magarena.exe \
release/Magarena.sh \
release/README.txt \
2013-01-05 22:20:50 -08:00
release/lib \
2011-05-29 18:51:10 -07:00
Magarena-1.$*
2016-09-09 21:12:39 -07:00
mkdir Magarena-1.$* /Magarena
2011-05-29 18:46:41 -07:00
cp -r \
2011-11-17 17:38:37 -08:00
release/Magarena/avatars \
release/Magarena/decks \
release/Magarena/scripts \
2014-05-13 01:47:06 -07:00
release/Magarena/scripts_missing \
2015-07-09 01:58:49 -07:00
release/Magarena/translations \
2011-05-29 18:51:10 -07:00
Magarena-1.$* /Magarena
2016-09-09 21:12:39 -07:00
mkdir Magarena-1.$* /Magarena/mods
2011-05-29 19:04:45 -07:00
cp \
2011-11-17 17:38:37 -08:00
release/Magarena/mods/*.txt \
2011-05-29 19:04:45 -07:00
Magarena-1.$* /Magarena/mods
2016-09-09 21:12:39 -07:00
mkdir Magarena-1.$* /Magarena/themes
2016-03-06 23:58:36 -08:00
cp \
2016-09-09 20:00:47 -07:00
release/Magarena/themes/felt_theme.zip \
2016-03-06 23:58:36 -08:00
Magarena-1.$* /Magarena/themes
2011-05-29 18:51:10 -07:00
-zip -r Magarena-1.$* .zip Magarena-1.$*
2013-09-28 22:59:47 -07:00
echo "preparing Mac dist"
2013-09-30 23:09:13 -07:00
cp -r Magarena.app Magarena-1.$* .app
2013-09-30 23:11:52 -07:00
cd Magarena-1.$* .app/Contents; ln -s ../../Magarena-1.$* Java
2013-09-30 23:09:13 -07:00
chmod a+x Magarena-1.$* .app/Contents/MacOS/MagarenaLauncher.sh
2012-06-14 03:26:36 -07:00
-zip -r Magarena-1.$* .app.zip Magarena-1.$* .app
2011-05-27 00:34:47 -07:00
2015-02-24 17:23:13 -08:00
$(JAR) : $( SRC )
2012-01-27 18:08:39 -08:00
ant -f build.xml
2011-05-22 19:52:01 -07:00
2015-02-24 17:23:13 -08:00
release/Magarena-%.jar :
make clean $( JAR)
mv $( JAR) $@
2012-06-14 03:26:36 -07:00
tags : $( SRC )
2012-03-10 01:59:23 -08:00
ctags -R src
2011-05-22 19:23:49 -07:00
2012-06-11 07:25:45 -07:00
Test%.run : $( MAG )
2013-09-25 23:12:41 -07:00
$( DEBUG) -DtestGame= Test$* -Dmagarena.dir= ` pwd ` /release -jar $^ 2>& 1 | tee Test$* .log
2011-05-28 00:47:06 -07:00
2011-05-22 19:52:01 -07:00
$(EXE) : $( MAG )
2011-05-24 19:22:08 -07:00
cd launch4j; ./launch4j ../release/magarena.xml
2011-05-22 19:40:28 -07:00
2011-05-22 19:23:49 -07:00
clean :
2011-05-24 20:10:09 -07:00
-ant clean
2012-06-14 03:26:36 -07:00
-rm -f $( MAG)
2011-05-28 00:47:06 -07:00
2012-08-25 07:09:10 -07:00
clean/% : Magarena -%.zip Magarena -%.app .zip
-rm -rf Magarena-$*
-rm -rf Magarena-$* .app
-rm Magarena-$* .zip
-rm Magarena-$* .app.zip
2012-09-22 05:00:36 -07:00
log.clean :
-rm -f *.log
2011-09-18 00:11:27 -07:00
inf : $( MAG )
2013-06-01 05:15:09 -07:00
-while true; do make debug = true 0` date +%s` .t; done
2011-09-18 00:11:27 -07:00
2015-09-30 05:29:54 -07:00
circleci :
2014-05-31 02:04:48 -07:00
$( eval MAG_ID := $( shell date +%s) )
2016-01-06 20:10:55 -08:00
make clean games = 100 ai1 = MMABC ai2 = MCTS ${ MAG_ID } .t || ( cat ${ MAG_ID } .out && tail -20 ${ MAG_ID } .log && false )
2014-09-27 18:25:32 -07:00
touch cards/standard_all.out cards/modern_all.out
touch cards/standard_all.txt cards/modern_all.txt
2014-02-27 19:25:44 -08:00
make zips
2015-09-30 05:29:54 -07:00
mv release/Magarena.jar *.zip ${ CIRCLE_ARTIFACTS }
2013-02-11 20:20:22 -08:00
2015-07-27 05:33:09 -07:00
test-self-play :
for i in ` seq 1 10` ; do tsp make games = 100 ai1 = MMABC ai2 = MCTS flags = -ea ` date +%N` .t; done
2013-02-11 17:58:21 -08:00
games ?= 10000
2013-03-09 05:44:47 -08:00
str1 ?= 1
str2 ?= 1
life ?= 10
2013-05-24 20:53:39 -07:00
ai1 ?= MMABFast
ai2 ?= MMABFast
2013-06-01 05:13:04 -07:00
debug ?= false
2016-07-19 02:54:22 -07:00
parseMissing ?= false
2015-12-10 04:52:40 -08:00
devMode ?= false
2013-06-01 05:13:04 -07:00
selfMode ?= false
2014-03-31 18:55:44 -07:00
flags ?=
2013-06-01 05:13:04 -07:00
2011-09-01 01:35:20 -07:00
%.t : $( MAG )
2014-10-29 21:04:55 -07:00
$( eval VER := $( shell git rev-parse --short HEAD) )
echo ${ VER } > $* .log
2014-03-31 18:55:44 -07:00
$( RUN) ${ flags } \
2013-05-28 00:26:17 -07:00
-Dmagarena.dir= ` pwd ` /release \
2013-06-01 05:13:04 -07:00
-Ddebug= ${ debug } \
2016-07-19 02:54:22 -07:00
-DparseMissing= ${ parseMissing } \
2015-11-11 06:02:44 -08:00
-DdevMode= ${ devMode } \
2014-04-01 22:54:29 -07:00
-Dgame.log= $* .log \
2014-09-01 19:45:08 -07:00
-Djava.awt.headless= true \
2013-05-28 00:26:17 -07:00
magic.DeckStrCal \
2012-09-26 18:59:42 -07:00
--seed $* \
2013-03-31 04:25:52 -07:00
--ai1 ${ ai1 } --str1 ${ str1 } \
2013-03-24 05:12:22 -07:00
--ai2 ${ ai2 } --str2 ${ str2 } \
2013-03-09 05:44:47 -08:00
--life ${ life } \
2012-09-26 18:59:42 -07:00
--games 1 \
2015-01-23 21:13:14 -08:00
--repeat ${ games } > $* .out 2>& 1
2011-07-26 20:36:20 -07:00
2014-03-10 20:21:53 -07:00
test : 100.d
2013-05-16 01:13:28 -07:00
debug : $( MAG )
2014-06-05 20:57:26 -07:00
make 101.t debug = true games = 0 flags = -ea || ( cat 101.out && false )
2012-04-14 18:10:16 -07:00
2011-06-27 02:16:19 -07:00
%.d : $( MAG )
2015-12-15 18:32:09 -08:00
$( DEBUG) \
-DrndSeed= $* \
-DselfMode= $( selfMode) \
-Ddebug= ${ debug } \
-DdevMode= ${ devMode } \
-Dmagarena.dir= ` pwd ` /release \
-jar $^ | & tee $* .log
2011-06-27 02:16:19 -07:00
2012-07-26 01:42:56 -07:00
# Z = 4.4172 (99.999%)
# E = 0.01
# best estimator for r is p = h / (h + t)
2012-08-05 07:18:42 -07:00
# this estimator has a margin of error E, |p - r| < E at a particular Z, p - E < r < p + E
2012-07-26 01:42:56 -07:00
# n = Z^2 / 4E^2
# = 48780
# ~ 50000
2014-05-12 00:48:21 -07:00
%.str : $( MAG ) deck 1.dec deck 2.dec
$( RUN) -ea -Dmagarena.dir= ` pwd ` /release \
magic.DeckStrCal \
--ai1 $* \
--str1 1 \
--deck1 $( word 2,$^) \
--ai2 $* \
--str2 1 \
--deck2 $( word 3,$^) \
--games 50000 >> $@ 2>& 1
2012-04-14 18:10:16 -07:00
2013-04-21 19:46:51 -07:00
#exp/%.log: $(MAG)
# scripts/evaluate_ai.sh $* > $@
2011-06-01 02:06:18 -07:00
2012-12-08 04:24:31 -08:00
decks/dl :
2012-06-02 02:49:07 -07:00
for i in ` curl http://www.wizards.com/magic/magazine/archive.aspx?tag= dailydeck | grep -o mtg/daily/deck/[ 0-9] * | cut -d'/' -f4` ; do make decks/dd_$$ i.dec; done
2012-07-26 01:51:56 -07:00
for i in ` curl http://www.wizards.com/magic/magazine/archive.aspx?tag= topdeck | grep -o mtg/daily/td/[ 0-9] * | cut -d'/' -f4` ; do make decks/td_$$ i.dec; done
2014-09-01 20:22:00 -07:00
grep "name=" -r incomplete | sed 's/.*name=/100 /' > decks/with_scripts.dec
2012-07-26 01:51:56 -07:00
2014-09-01 20:22:00 -07:00
decks/with_scripts.dec : $( wildcard incomplete /*.txt )
cat $^ | grep "name=" | sed 's/.*name=//;s/^/100 /' | sort > $@
2013-02-14 22:23:42 -08:00
2012-10-07 03:02:50 -07:00
%.fix_date :
touch $* -d " `cat $* | head -2 | tail -1 | sed 's/# //'` "
2012-07-26 01:51:56 -07:00
# Daily Deck
2012-10-06 03:42:23 -07:00
decks/dd_%.dec :
curl " http://www.wizards.com/Magic/Magazine/Article.aspx?x=mtg/daily/deck/ $* " | awk -f scripts/dailyhtml2dec.awk > $@
make $@ .fix_date
2011-06-18 08:42:56 -07:00
2012-07-26 01:51:56 -07:00
# Top Decks
2012-10-06 03:42:23 -07:00
decks/td_%.dec :
curl http://www.wizards.com/Magic/Magazine/Article.aspx?x= mtg/daily/td/$* | awk -f scripts/dailyhtml2dec.awk > $@
make $@ .fix_date
# Mike Flores
decks/mf_%.dec :
curl http://www.wizards.com/Magic/Magazine/Article.aspx?x= mtgcom/daily/mf$* | awk -f scripts/dailyhtml2dec.awk > $@
make $@ .fix_date
2011-06-19 23:06:10 -07:00
2013-02-14 21:45:23 -08:00
# Decks from magic-league.com
2012-07-26 01:51:56 -07:00
decks/ml_%.dec : scripts /apprentice 2dec .awk
wget " http://www.magic-league.com/decks/download.php?deck= $* &index=1 " -O - | flip -u - | awk -f $^ > $@
2013-02-14 21:45:23 -08:00
# Decks from www.mtgtop8.com
decks/mtgtop8_%.dec :
2013-02-14 22:23:42 -08:00
wget " http://www.mtgtop8.com/export_files/deck $* .mwDeck " -O $@
2013-02-14 21:45:23 -08:00
2013-07-13 19:11:06 -07:00
decks/update :
2014-01-01 05:50:49 -08:00
$( eval LAST := $( shell curl http://mtgtop8.com/search | grep "&d=[0-9]\+" -o | sort | tail -1 | sed 's/&d=//' ) )
2013-07-18 18:53:15 -07:00
-seq ` expr ${ LAST } - 200` ${ LAST } | parallel make decks/mtgtop8_{ } .dec
2013-07-13 19:11:06 -07:00
find decks -size 0 -delete
2015-01-18 17:11:33 -08:00
ref/MagicCompRules_latest.txt :
2016-08-28 19:42:23 -07:00
wget ` curl http://magic.wizards.com/en/game-info/gameplay/rules-and-formats/rules | grep -o "http://media.*\.txt" ` -O $@
2015-01-18 17:11:33 -08:00
2015-01-20 00:42:49 -08:00
ref/rules.txt : ref /MagicCompRules_latest .txt
2016-09-16 22:13:29 -07:00
iconv -f UTF-16LE -t UTF-8 $^ | fmt -s > $@
2013-07-13 04:56:40 -07:00
flip -bu $@
2011-06-20 18:58:22 -07:00
resources/magic/data/icons/missing_card.png :
2011-06-20 19:27:14 -07:00
convert -background gray -bordercolor black -border 5x5 -size 302x435 \
-pointsize 30 label:'\nNo card image found\n\nSelect\n\"Download images\"\nfrom Arena menu\n\nOR\n\nSwitch to text mode\nusing the Enter key' $@
2011-06-22 19:02:22 -07:00
2011-06-24 00:01:27 -07:00
cards/evan_cube.txt :
curl http://www.cubedrafting.com/view-the-cube/ | grep jTip | sed "s/<[^>]*>//g;s/\&\#8217;/'/" > $@
cards/brett_cube.txt :
curl http://www.snazzorama.com/magic/cube/ | grep ":WizardsAutoCard" | sed "s/<\/td>.*//;s/<[^>]*>//g;s/\&\#8217;/'/" > $@
2011-06-28 19:05:50 -07:00
2011-06-28 20:07:08 -07:00
cards/tom_cube.txt :
wget -O - http://www.tomlapille.com/cube/tom_list.html | sed 's/<[^>]*>//g;s/^[ ]*//g;/^$$/d' > $@
cards/adam_cube.txt :
wget -O - http://www.tomlapille.com/cube/adam_list.html | sed 's/<[^>]*>//g;s/^[ ]*//g;/^$$/d' > $@
cards/AWinnarIsYou_cube.txt :
wget -O - http://www.tomlapille.com/cube/winnar_list.html | sed 's/<[^>]*>//g;s/^[ ]*//g;/^$$/d' > $@
2011-06-28 19:05:50 -07:00
2012-03-13 01:13:52 -07:00
cards/mtgo_cube.txt :
wget -O - https://www.wizards.com/magic/magazine/article.aspx?x= mtg/daily/arcana/927 | grep autoCard | sed 's/<[^<]*>//g;s/^[ ]*//g' > $@
2012-07-05 00:53:36 -07:00
cards/mtgo_cube2.txt :
wget -O - https://www.wizards.com/magic/magazine/article.aspx?x= mtg/daily/other/07032012d | grep autoCard | sed 's/<[^<]*>//g;s/^[ ]*//g' > $@
2012-08-25 06:14:05 -07:00
upload/% : Magarena -%.zip Magarena -%.app .zip
2012-07-28 22:52:49 -07:00
make upload/Magarena-$* .app.zip
make upload/Magarena-$* .zip
upload/Magarena-%.app.zip : Magarena -%.app .zip
2012-02-25 06:54:08 -08:00
scripts/googlecode_upload.py \
-p magarena \
-u melvinzhang@gmail.com \
-w ` cat ~/Modules/notes/keys/googlecode_pw.txt` \
2012-07-28 22:48:46 -07:00
-s " Magarena $* (Mac) " \
2012-02-25 06:54:08 -08:00
-l Featured,Type-Installer,OpSys-OSX \
2012-07-28 22:52:49 -07:00
$^
2012-02-25 06:54:08 -08:00
2012-07-28 22:52:49 -07:00
upload/Magarena-%.zip : Magarena -%.zip
2012-02-25 06:54:08 -08:00
scripts/googlecode_upload.py \
-p magarena \
-u melvinzhang@gmail.com \
-w ` cat ~/Modules/notes/keys/googlecode_pw.txt` \
2012-07-28 22:48:46 -07:00
-s " Magarena $* " \
2012-02-25 06:54:08 -08:00
-l Featured,Type-Archive,OpSys-Linux,OpSys-Windows \
2012-07-28 22:52:49 -07:00
$^
2012-02-25 06:54:08 -08:00
2011-10-26 20:06:12 -07:00
%.up : %
scripts/googlecode_upload.py \
-p magarena \
-u melvinzhang@gmail.com \
-w ` cat ~/Modules/notes/keys/googlecode_pw.txt` \
2012-07-28 22:48:46 -07:00
-s " $^ " \
2011-10-26 20:06:12 -07:00
$^
2015-03-19 21:51:34 -07:00
cards/cards.orig.xml :
wget ` curl 'http://www.slightlymagic.net/forum/viewtopic.php?f=27&t=1347' | grep -o "http[^<]*dl.dropbox[^<]*.zip\"" | sed 's/"//' `
unzip mtg-data-2015*.zip mtg-data/cards.xml mtg-data/meta.xml mtg-data/setinfo.xml
mv mtg-data/cards.xml $@
mv mtg-data/* cards
rmdir mtg-data
unzip mtg-data-txt*.zip -d cards
2014-09-16 22:02:42 -07:00
# correct phyrexian mana from {P/.} -> {./P}
cards/cards.xml : cards /cards .orig .xml
sed "s/{P\/\(.\)}/{\1\/P}/g;s/’ /'/g" $^ > $@
2014-10-29 20:48:31 -07:00
cards/scriptable.txt : scripts /analyze_cards .scala scripts /effects .txt cards /cards .xml cards /existing_master .txt
2012-03-25 00:05:43 -07:00
scala $^ > $@
2011-07-18 20:01:09 -07:00
2012-04-09 07:08:23 -07:00
cards/magicdraftsim-sets :
curl www.magicdraftsim.com/card-ratings | \
grep Kamigawa | \
head -1 | \
sed 's/value=/\n/g' | \
sed 's/<.*//' | \
cut -d\' -f2 | \
sed '/^$$/d' > $@
cards/magicdraftsim-rating : cards /magicdraftsim -sets
2011-07-18 20:01:09 -07:00
for i in ` cat $^` ; do \
curl http://www.magicdraftsim.com/card-ratings/$$ i | \
2012-03-03 08:40:47 -08:00
pandoc -f html -t plain | \
grep "^[ ]*[0-9]" | \
sed " s/^[ ]*[0-9]*/ $$ i/;s/[ ][ ][ ]*/\t/g " ; \
2011-07-18 20:01:09 -07:00
done > $@
2011-07-28 19:44:02 -07:00
2011-08-08 01:50:36 -07:00
cards/current-magic-excel.txt :
wget http://www.magictraders.com/pricelists/current-magic-excel.txt -O $@
2011-08-09 21:50:25 -07:00
2012-03-11 08:12:49 -07:00
code_clones :
2015-04-11 17:56:30 -07:00
java -jar ~/App/simian/bin/simian.jar release/Magarena/scripts/*.groovy > $@
2012-04-09 07:14:14 -07:00
2012-04-27 20:16:31 -07:00
cards/mtg-data :
2012-07-26 01:42:56 -07:00
curl https://dl.dropbox.com/u/2771470/index.html | grep -o 'href="mtg.*.zip' | head -1 | sed 's/href="//' | xargs -I'{}' wget https://dl.dropbox.com/u/2771470/'{}'
unzip -j mtg-data*.zip -d cards
rm mtg-data*.zip
2012-04-27 20:16:31 -07:00
2012-05-19 23:12:56 -07:00
unique_property :
grep "=" release/Magarena/scripts/*.txt| cut -d'=' -f1 | sort | uniq -c | sort -n
2012-05-21 22:08:09 -07:00
2014-10-29 20:48:31 -07:00
cards/scored_by_dec.tsv : cards /existing_master .txt cards /unimplementable .tsv $( wildcard decks /*.dec )
2013-02-14 21:45:23 -08:00
./scripts/score_card.awk decks/*.dec | \
2012-05-23 07:18:41 -07:00
sort -rg | \
2014-03-03 21:21:06 -08:00
unaccent iso-8859-15 | \
2013-02-14 22:23:42 -08:00
./scripts/keep_unimplemented.awk $( word 1,$^) /dev/stdin | \
./scripts/keep_unimplemented.awk <( cut -f1 $( word 2,$^) ) /dev/stdin > $@
2012-06-28 23:09:40 -07:00
cards/mtg_mana_costs :
grep -ho "\(\{[^\}]\+\}\)\+" -r cards/cards.xml | sort | uniq > $@
cards/mag_mana_costs :
grep -ho "\(\{[^\}]\+\}\)\+" -r src/magic/model/MagicManaCost.java release/Magarena/scripts | sort | uniq > $@
cards/mana_cost_graph.dot : cards /mtg_mana_costs
cat $^ | \
sed 's/{X}//g;s/{[[:digit:]]*}//g;s/{[CPQT]*}//g;/^$$/d' | \
awk -f scripts/mana_cost_graph.awk > $@
cards/mana_cost_graph.png : cards /mana_cost_graph .dot
circo $^ -Tpng -o $@
verify_mana_cost_order : cards /mtg_mana_costs cards /mag_mana_costs
join -v2 $^
2012-08-08 23:38:06 -07:00
2012-08-10 18:40:55 -07:00
%.update_value : %
if grep token = $^; then \
echo "ERROR: Not applicable to tokens" ; \
else \
2015-03-29 02:45:09 -07:00
name = $$ ( grep name = $^ | sed 's/name=//' ) ; \
value = $$ ( curl -sLG http://gatherer.wizards.com/pages/card/details.aspx --data-urlencode " name= $$ name " | grep "textRatingValue" | grep -o "[0-9]\.[^<]*" | head -1) ; \
2015-07-23 21:03:07 -07:00
if [ ! -z " $$ value " ] ; then sed -i " s/value=.*/value= $$ value/ " $^; fi ; \
2012-08-10 18:40:55 -07:00
fi \
2012-08-18 18:05:00 -07:00
%.normalize : %
flip -u $^
make $^.update_value
vim $^
hg add $^
2012-09-07 21:18:30 -07:00
2015-06-06 18:01:49 -07:00
update_default_value :
grep value = 2.500 -r release/Magarena/scripts release/Magarena/scripts_missing -l | parallel -j 30 make { } .update_value
git checkout -- ` grep " value= $$ " -r release/Magarena/scripts release/Magarena/scripts_missing -l`
2015-07-23 21:03:07 -07:00
update_all_value :
grep value = -r release/Magarena/scripts release/Magarena/scripts_missing -l | parallel -j 30 make { } .update_value
git checkout -- ` grep " value= $$ " -r release/Magarena/scripts release/Magarena/scripts_missing -l`
2012-10-25 19:07:13 -07:00
find_event_data : scripts /check_data .awk
2012-10-06 18:37:34 -07:00
for i in ` grep "new MagicEvent(" -lr src` ; do \
2012-09-08 19:52:21 -07:00
grep "new Object\|data\[[0-9\]" $$ i > /dev/null && echo $$ i; \
2012-09-08 19:24:29 -07:00
grep "new Object\|data\[[0-9\]" $$ i | awk -f $^ | sed 's/ //g' | sed 's/:/:\t/' ; \
done > $@
2012-09-07 21:18:30 -07:00
flip -u $@
2012-09-08 19:52:21 -07:00
2012-10-25 19:07:13 -07:00
find_literals :
grep "\"" src/magic/card/* | awk -f scripts/check_literals.awk
2012-10-26 04:34:55 -07:00
find_single_line_card_code : $( MAG )
cat src/magic/card/*.java | sed 's/\s\+//g' | sed 's/(.*)/(...)/g' | sort | uniq -c | sort -n | grep publicstaticfinal | grep ");" > $@
find_casts : $( MAG )
2012-10-26 18:17:58 -07:00
grep -n "([A-Za-z<>]\+)[A-Za-z]\+" -r src/ > $@
2012-10-26 04:34:55 -07:00
flip -u $@
find_nulls : $( MAG )
grep -n "null" -r src/ > $@
flip -u $@
2015-02-11 19:29:05 -08:00
find_ui : $( MAG )
grep 'magic.ui\|java.awt\|javax.swing' -lr src | grep -v '^src/magic/ui' | sort > $@
2015-02-14 01:15:11 -08:00
find_android : $( MAG )
find src -iname "*.java" | parallel javac -bootclasspath robovm-rt-1.0.0-beta-03.jar -cp $^ -d build { } 2> $@
2012-10-25 19:07:13 -07:00
# meta check
2013-05-26 22:18:25 -07:00
checks : \
check_requires_groovy_code \
check_script_name \
2013-10-23 06:14:56 -07:00
check_tokens \
2015-05-13 20:20:07 -07:00
check_all_cards \
2013-11-28 18:28:08 -08:00
check_unique_property \
check_required_property \
2014-03-08 16:41:19 -08:00
check_spells \
2013-07-02 18:46:03 -07:00
check_groovy_escape \
2014-01-20 18:10:45 -08:00
check_empty_return \
2013-07-16 20:08:24 -07:00
check_image \
2015-12-05 16:43:26 -08:00
check_decks \
2016-01-05 17:55:02 -08:00
check_mana_or_combat \
2016-02-29 21:49:01 -08:00
check_color_or_cost \
2016-07-16 19:10:13 -07:00
check_tap_tap \
check_no_extra_space
2013-07-17 06:00:32 -07:00
2014-08-07 18:07:13 -07:00
remove_extra_missing :
2014-10-26 23:02:48 -07:00
git rm ` join <( ls -1 release/Magarena/scripts | sort) <( ls -1 release/Magarena/scripts_missing | sort) | sed 's/^/release\/Magarena\/scripts_missing\//' `
2014-07-08 00:27:30 -07:00
2016-06-04 18:44:16 -07:00
remove_extra_groovy :
git rm ` make check_requires_groovy_code | grep '< ' | sed 's/< /release\/Magarena\/scripts\//;s/$$/.groovy/' `
2013-07-17 06:00:32 -07:00
# check rarity using meta.xml
check_rarity : scripts /fix_rarity .scala cards /meta .xml
cat release/Magarena/scripts/*.txt | scala $^ | grep -v "not be L" | grep -v "Windseeker Centaur" | ${ NO_OUTPUT }
2013-07-16 20:08:24 -07:00
# check metadata using cards.xml
2013-07-16 22:55:13 -07:00
check_meta : cards /scriptable .txt
2014-05-17 19:10:15 -07:00
diff <( cat ` grep name = $^ | sed -f scripts/normalize_name.sed | sed 's/name_/release\/Magarena\/scripts\//;s/$$/.txt/' ` ) \
2013-07-16 22:55:13 -07:00
<( sed '/^$$/d' $^) -d | \
2013-07-16 20:08:24 -07:00
grep ">" | \
${ NO_OUTPUT }
2013-07-02 18:46:03 -07:00
# every image is to a jpg file or attachment
check_image :
2013-12-03 20:16:40 -08:00
grep '^image=' -r release/Magarena/scripts | grep -v " jpg $$ " | grep -v " png $$ " | grep -v attachment.php | ${ NO_OUTPUT }
2012-10-25 19:07:13 -07:00
2013-01-12 18:14:58 -08:00
# every card that requires groovy code has a corresponding groovy script file
# every groovy script file has a corresponding card script that requires groovy code
2015-12-06 00:44:43 -08:00
# every groovy script file has a txt file with the same name that requires groovy code
2013-01-12 18:14:58 -08:00
check_requires_groovy_code :
diff \
<( ls -1 release/Magarena/scripts/*.groovy | cut -d'/' -f 4 | sed 's/.groovy//' | sort) \
2014-05-17 19:10:15 -07:00
<( grep requires_groovy_code -r release/Magarena/scripts/ | sed 's/.*=//' | sed 's/;/\n/g' | sed 's/.*scripts\///;s/.txt.*//' | sed -f scripts/normalize_name.sed | sort | uniq)
2015-12-06 00:44:43 -08:00
grep -L requires_groovy ` ls -1 release/Magarena/scripts/*.groovy | sed 's/groovy/txt/' ` | ${ NO_OUTPUT }
2013-01-12 18:14:58 -08:00
2013-05-26 22:18:25 -07:00
# $ must be escaped as \$ in groovy script
check_groovy_escape :
2013-07-16 20:08:24 -07:00
grep '[^\\]\$$' -r release/Magarena/scripts | grep -v '\$${' | ${ NO_OUTPUT }
2013-05-26 22:18:25 -07:00
2014-01-20 18:10:45 -08:00
# return should not be last token in groovy script
check_empty_return :
2014-03-05 18:59:47 -08:00
grep " return[[:space:]]* $$ " -r release/Magarena/scripts/*.groovy | ${ NO_OUTPUT }
2014-01-20 18:10:45 -08:00
2012-10-30 02:50:30 -07:00
# script name is canonical card name
2012-10-06 00:44:55 -07:00
check_script_name :
2012-10-05 19:01:02 -07:00
diff \
2013-01-12 18:14:58 -08:00
<( ls -1 release/Magarena/scripts/ | grep txt | sort) \
2014-05-17 19:10:15 -07:00
<( grep "name=" -r release/Magarena/scripts/ | sort | sed 's/.*name=//' | sed -f scripts/normalize_name.sed | sed 's/$$/.txt/' )
2012-10-05 19:01:02 -07:00
2013-10-13 19:58:44 -07:00
# check tokens used match tokens in scripts
check_tokens :
diff \
2014-01-20 18:04:21 -08:00
<( grep -ho "name=.*" ` grep token = -lr release/Magarena/scripts` | sed 's/name=//' | sort) \
2016-06-18 17:52:38 -07:00
<( grep 'CardDefinitions.getToken("' -r release/Magarena/scripts src | grep -o '".*"' | sed 's/"//g' | sort | uniq) | grep ">" | ${ NO_OUTPUT }
2013-10-13 19:58:44 -07:00
2013-10-27 20:16:43 -07:00
# check that cards in decks exist in the game
check_decks :
diff \
<( grep "name=" -r release/Magarena/scripts/ | sed 's/.*name=//' | sort) \
2013-12-14 17:17:47 -08:00
<( cat release/Magarena/decks/prebuilt/*.dec | grep "^[0-9]" | sed 's/^[0-9]* //' | sort | uniq) | grep ">" | ${ NO_OUTPUT }
2013-10-27 20:16:43 -07:00
2015-05-13 20:20:07 -07:00
# each property occurs at most once
2013-11-28 18:28:08 -08:00
check_unique_property :
2013-07-19 06:06:48 -07:00
grep "^[^=]*" -r release/Magarena/scripts/*.txt | sed 's/=.*//g' | sort | uniq -d | ${ NO_OUTPUT }
2012-12-31 00:29:21 -08:00
2013-11-28 18:28:08 -08:00
property_stats :
grep "^[a-z]*=" -hr release/Magarena/scripts/*.txt -o | sort | uniq -c | sort -n
check_required_property :
2014-01-25 18:02:30 -08:00
grep ^image= -L release/Magarena/scripts/*.txt | ${ NO_OUTPUT }
grep ^name= -L release/Magarena/scripts/*.txt | ${ NO_OUTPUT }
grep ^type= -L release/Magarena/scripts/*.txt | ${ NO_OUTPUT }
grep ^value= -L release/Magarena/scripts/*.txt | ${ NO_OUTPUT }
grep ^rarity= -L ` grep token = -L release/Magarena/scripts/*.txt` | ${ NO_OUTPUT }
grep ^timing= -L ` grep token = -L release/Magarena/scripts/*.txt` | ${ NO_OUTPUT }
2013-11-28 18:28:08 -08:00
2014-03-08 16:41:19 -08:00
# Instant and Sorcery must have either effect or requires_groovy_code
check_spells :
grep requires_groovy_code -L $$ ( grep effect -L $$ ( grep "^type.*Instant" -lr release/Magarena/scripts) ) | ${ NO_OUTPUT }
grep requires_groovy_code -L $$ ( grep effect -L $$ ( grep "^type.*Sorcery" -lr release/Magarena/scripts) ) | ${ NO_OUTPUT }
2016-06-14 20:55:59 -07:00
check_unused_condition :
grep "public static" -r src/magic/model/condition/MagicCondition.java | grep -o "Condition [A-Z]\+[^ =]*" | sed 's/Condition //' | sort | uniq > declared-conds
for i in ` cat declared-conds` ; do grep $$ i -r src release/Magarena/scripts | grep -v "public static" | grep -o $$ i; done | sort | uniq > used-conds
diff declared-conds used-conds | ${ NO_OUTPUT }
rm declared-conds used-conds
2014-04-05 20:15:49 -07:00
check_unused_filter :
2014-04-06 02:04:14 -07:00
grep "Impl [A-Z]\+[^ =]*" src/magic/model/target/MagicTargetFilterFactory.java -o | sed 's/Impl //' | sort | uniq > declared-filters
2014-04-06 02:10:39 -07:00
for i in ` cat declared-filters` ; do grep $$ i -r src release/Magarena/scripts | grep -v "public static final" | grep -o $$ i; done | sort | uniq > used-filters
2014-04-05 20:15:49 -07:00
diff declared-filters used-filters | ${ NO_OUTPUT }
2014-04-06 03:47:09 -07:00
rm declared-filters used-filters
2014-04-05 20:15:49 -07:00
2014-04-06 06:35:09 -07:00
check_unused_choice :
2014-04-06 06:37:03 -07:00
grep "public static final" -r src/magic/model/choice/MagicTargetChoice.java | grep -o "Choice [A-Z]\+[^ =]*" | sed 's/Choice //' | sort | uniq > declared-choices
2014-04-06 06:35:09 -07:00
for i in ` cat declared-choices` ; do grep $$ i -r src release/Magarena/scripts | grep -v "public static final" | grep -o $$ i; done | sort | uniq > used-choices
diff declared-choices used-choices | ${ NO_OUTPUT }
rm declared-choices used-choices
2015-05-13 20:20:07 -07:00
check_all_cards :
diff \
2015-09-26 21:10:02 -07:00
<( grep "name=" ` grep "token=\|^overlay" -Lr release/Magarena/scripts release/Magarena/scripts_missing` -h | sed 's/name=//' | sort | uniq) \
2015-07-23 19:53:48 -07:00
<( sort resources/magic/data/AllCardNames.txt)
2015-05-13 20:20:07 -07:00
2015-12-05 16:43:26 -08:00
check_mana_or_combat :
diff \
<( grep mana_or_combat -lr release/Magarena/scripts) \
<( grep "mana pool.*becomes a" -r release/Magarena/scripts -l)
2016-01-05 17:55:02 -08:00
# all cards except lands should have either color, or cost, or both
check_color_or_cost :
diff \
2016-01-05 18:01:44 -08:00
<( grep "^\(cost=\|color=\|type.*Land\)" -r release/Magarena/scripts/*.txt -l) \
2016-01-05 17:55:02 -08:00
<( ls release/Magarena/scripts/*.txt | sort)
2016-02-29 21:49:01 -08:00
check_tap_tap :
grep "{T}, Tap" -ir release/Magarena/scripts | grep -v oracle | grep -iv "{T}, Tap another" | ${ NO_OUTPUT }
2016-07-16 19:10:13 -07:00
check_no_extra_space :
grep "^[[:space:]]" resources/magic/data/AllCardNames.txt -r resources/magic/data/sets | ${ NO_OUTPUT }
grep " [[:space:]] $$ " resources/magic/data/AllCardNames.txt -r resources/magic/data/sets | ${ NO_OUTPUT }
2012-09-29 20:20:52 -07:00
crash.txt : $( wildcard *.log )
for i in ` grep "^Excep" -l $^` ; do \
tail -n +` grep -n "random seed" $$ i | tail -1 | cut -d':' -f1` $$ i; \
2012-09-30 23:59:46 -07:00
done >> $@
2012-11-19 23:40:16 -08:00
rm $^
2012-10-26 21:57:23 -07:00
support/ui :
for i in src/$@ /*.java; do wget https://cakehat.googlecode.com/svn/trunk/$$ i -O $$ i; done
2014-10-29 20:50:41 -07:00
wiki/UpcomingCards.md : cards /new .txt
2014-10-31 19:08:25 -07:00
cat <( echo '~~~~' ) $^ <( echo '~~~~' ) > $@
2012-12-12 22:12:53 -08:00
2012-12-14 19:37:52 -08:00
parser/test : $( MAG )
2013-04-20 06:39:59 -07:00
$( RUN) magic.grammar.Check < grammar/parsable.txt
2012-12-12 22:12:53 -08:00
parser/test_all : $( MAG ) grammar /rules .txt
2013-04-20 06:39:59 -07:00
$( RUN) magic.grammar.Check < $( word 2,$^)
2012-12-12 22:12:53 -08:00
parser/run : $( MAG )
2013-04-20 06:39:59 -07:00
$( RUN) magic.grammar.Check
2012-12-12 22:12:53 -08:00
2013-02-12 20:30:51 -08:00
grammar/parsable.txt : src /magic /grammar /MagicRuleParser .java
2012-12-12 22:12:53 -08:00
make parser/test_all > grammar/test_all.out
cat grammar/test_all.out | grep PARSED | sed 's/PARSED: //' | sort | uniq > $@
cat grammar/test_all.out | grep FAILED | sort | uniq -c | sort -n > grammar/failed.txt
src/magic/grammar/MagicRuleParser.java : grammar /mtg .peg
2014-09-10 22:40:02 -07:00
java -cp lib/Mouse-1.6.1.jar mouse.Generate -M -G $^ -P MagicRuleParser -S MagicSyntaxTree -p magic.grammar -r magic.grammar
2012-12-12 22:12:53 -08:00
mv MagicRuleParser.java $@
sed -i 's/accept()/sem.action() \&\& accept()/g' $@
grammar/CounterType : grammar /rules .txt
grep -o "[^ ]* counter \(on\|from\)" $@ | cut -d' ' -f1 | sort | uniq > $@
# remove a, each, that
# add poison
2012-12-27 19:08:26 -08:00
2014-10-29 20:48:31 -07:00
cards/cards_per_set.tsv : cards /existing_master_full .txt
2013-03-07 06:58:14 -08:00
cat <( grep -o ", [A-Z0-9]* [A-Z]" $^ | cut -d' ' -f2) \
2013-03-07 19:05:46 -08:00
<( grep -o "^[A-Z0-9]* [A-Z]" $^ | cut -d' ' -f1) \
| sort \
| uniq -c \
| sort -n \
| sed 's/^ *//g;s/ /\t/' \
> $@
2013-03-13 05:52:31 -07:00
2013-03-13 06:30:59 -07:00
smallest.convert :
make ` ls -1S src/magic/card | grep java | sed 's/.java//' | tail -1` .convert
2013-05-18 00:20:28 -07:00
echo card with code: ` ls -1 src/magic/card/*.java | wc -l`
echo card with script: ` ls -1 release/Magarena/scripts/*.groovy | wc -l`
2013-03-13 06:30:59 -07:00
2013-03-13 05:52:31 -07:00
%.convert :
2013-03-13 05:55:53 -07:00
hg mv src/magic/card/$* .java release/Magarena/scripts/$* .groovy
vim release/Magarena/scripts/$* .groovy
sed -i 's/card_/groovy_/' release/Magarena/scripts/$* .txt
2013-03-13 05:52:31 -07:00
hg commit -m "convert from java code to groovy code"
2013-03-13 06:30:59 -07:00
2013-04-16 01:51:33 -07:00
ai/benchmark.rnd :
2013-04-19 19:19:03 -07:00
sort -R exp/AIs.txt > exp/rnd.txt
2013-06-01 05:13:04 -07:00
ts make debug = true games = 10 life = 20 \
2013-04-16 01:51:33 -07:00
ai1 = ` cat exp/rnd.txt | tail -1` \
str1 = ` sort -R exp/STRs.txt | tail -1` \
ai2 = ` cat exp/rnd.txt | tac | tail -1` \
str2 = ` sort -R exp/STRs.txt | tail -1` \
2013-04-21 19:46:51 -07:00
` date +%s` .t
ts make ai/benchmark.rnd
2013-04-16 01:51:33 -07:00
2013-05-10 18:55:41 -07:00
exp/zermelo.tsv : $( wildcard exp /136*.log )
2013-04-19 19:19:03 -07:00
awk -f exp/extract_games.awk $^ | ./exp/whr.rb | tac > $@
2013-05-25 01:14:01 -07:00
2015-12-08 21:42:06 -08:00
bytes_per_card.txt :
for i in ` seq 39 68` ; do echo -n " 1. $$ i " ; make bytes_per_card.1.$$ i -s ; done > bytes_per_card.txt
2014-01-23 19:09:12 -08:00
bytes_per_card.% :
2015-04-05 20:55:05 -07:00
echo ` git show $* :release/Magarena/scripts | tail -n+3 | sed 's/^/$*:release\/Magarena\/scripts\//' | git cat-file --batch | grep -v " blob " | sed 's/^[[:space:]]*//;/^$$/d' | wc -c` \
2013-05-25 01:14:01 -07:00
/ \
2015-04-05 20:55:05 -07:00
` git show $* :release/Magarena/scripts | grep '\.txt' | wc -l` \
2013-05-25 01:14:01 -07:00
| bc -l
2013-08-10 03:45:54 -07:00
reminder.txt : cards /cards .xml
grep 'reminder="[^"]*"' $^ -o | sed 's/reminder=//' | sort | uniq -c | sort -rn > $@
2013-08-10 18:42:21 -07:00
2013-12-14 17:17:47 -08:00
FILES = release/Magarena/**/*.txt release/Magarena/**/*.groovy release/Magarena/decks/**/*.dec src/**/*.java
2013-09-15 05:34:48 -07:00
2013-09-08 18:55:38 -07:00
normalize_files :
# add newline at end of file
2014-09-07 18:13:18 -07:00
shopt -s globstar; sed -i -e '$$a\' ${ FILES }
2013-09-08 18:55:38 -07:00
# convert DOS newlines to UNIX format
2014-09-07 18:13:18 -07:00
shopt -s globstar; sed -i -e 's/\x0D$$//' ${ FILES }
2013-09-08 18:55:38 -07:00
# convert tab to four spaces
2014-09-07 18:13:18 -07:00
shopt -s globstar; sed -i -e 's/\t/ /g' ${ FILES }
2013-11-10 19:14:40 -08:00
# remove empty lines in scripts
sed -i -e '/^\s*$$/d' release/Magarena/scripts/*.txt
2014-03-04 23:09:26 -08:00
# use mtgimage for image
2014-09-07 17:56:05 -07:00
# make img-mtgimage
2014-08-07 18:07:13 -07:00
# remove extra scripts_missing
2013-08-24 22:33:47 -07:00
%.post :
@echo "[img]" ` grep -o "http.*jpg" release/Magarena/scripts/$* .txt` "[/img]"
@echo
@echo " Magarena/scripts/ $* .txt "
@echo "[code]"
@cat release/Magarena/scripts/$* .txt
@echo "[/code]"
@echo
@echo " Magarena/scripts/ $* .groovy "
@echo "[code]"
@cat release/Magarena/scripts/$* .groovy
@echo "[/code]"
2013-10-05 23:08:28 -07:00
untracked :
hg stat | sed 's/^. //;s/.*/"&"/' | xargs ls -ltr
2013-10-15 02:57:55 -07:00
common_actions :
grep -ho "Magic[A-Za-z]*Action" -r release/Magarena/scripts | sort | uniq -c | sort -n
2013-10-28 23:45:38 -07:00
src/magic/MurmurHash3.java :
curl https://raw.github.com/infinispan/infinispan/master/commons/src/main/java/org/infinispan/commons/hash/MurmurHash3.java > $@
2013-11-01 18:48:57 -07:00
patch $@ src/magic/MurmurHash3.diff
2013-11-29 18:01:56 -08:00
2014-03-04 23:09:26 -08:00
img-mtgimage :
2013-11-29 18:01:56 -08:00
grep mtgimage -L ` grep token = -L release/Magarena/scripts/*.txt` | parallel awk -f scripts/set_image.awk { } '>' { .} .img
2014-03-01 21:49:57 -08:00
-ls -1 release/Magarena/scripts/*.img | parallel mv { } { .} .txt
2013-12-14 22:27:02 -08:00
2014-10-31 19:03:35 -07:00
up :
2014-11-10 21:48:17 -08:00
cd wiki; git pull
cd website; git pull
2014-11-14 19:26:16 -08:00
2014-10-27 05:50:04 -07:00
git fetch -v origin master
2014-10-29 01:38:56 -07:00
git merge --ff-only origin/master
2014-11-14 19:26:16 -08:00
git fetch palladiamors
2014-10-27 04:21:04 -07:00
git fetch -v firemind master
2014-11-02 17:44:01 -08:00
git log base..firemind/master
2014-01-19 18:27:47 -08:00
2014-10-31 19:02:25 -07:00
firemind :
2014-10-28 18:49:42 -07:00
git checkout -b temp --no-track firemind/master
2014-10-28 18:47:16 -07:00
git rebase base --onto master
2014-10-28 06:22:46 -07:00
git checkout master
2014-10-28 18:43:09 -07:00
git merge --ff-only temp
2014-10-28 06:22:46 -07:00
git branch -d temp
2014-10-28 18:43:09 -07:00
git checkout base
git merge --ff-only firemind/master
git checkout master
2014-11-12 18:31:32 -08:00
git diff origin/master master | sed 's/b\///' >> firemind.diff
2014-10-31 19:02:25 -07:00
make normalize_files checks debug
2014-10-28 06:22:46 -07:00
2014-11-14 16:49:08 -08:00
%.rebase :
git checkout -b temp --no-track $*
git rebase -i master
git checkout master
git merge --ff-only temp
git branch -d temp
2014-01-19 18:27:47 -08:00
properties.diff :
2014-05-17 19:10:15 -07:00
diff <( cat ` grep name = cards/scriptable.txt | sed -f scripts/normalize_name.sed | sed 's/name_/release\/Magarena\/scripts\//;s/$$/.txt/' ` ) \
2014-01-19 18:27:47 -08:00
<( sed '/^$$/d' cards/scriptable.txt) -d -u > $@
2014-02-23 20:01:38 -08:00
2014-03-22 04:35:50 -07:00
common_costs :
grep "[^\"]*:" grammar/rules.txt -o | sed 's/>//;s/, /\n/g;s/://' | sort | uniq -c | sort -n | grep -v "{" > $@
2014-04-25 18:35:06 -07:00
push : clean normalize_files checks debug
2014-10-26 23:37:13 -07:00
git push origin master
2014-05-01 04:44:58 -07:00
resources/magic/data/AllCardNames.txt :
grep "<name>" -r cards/cards.xml | sed 's/<[^>]*>//g;s/^ *//' | unaccent utf-8 | recode html..ascii | sort > $@
2014-05-05 21:54:38 -07:00
2016-07-16 18:33:43 -07:00
resources/magic/data/sets/%.txt :
curl https://mtgjson.com/json/$* .json | jq -r .cards[ ] .name | LC_ALL = C sort | uniq > $@
2014-05-05 21:54:38 -07:00
missing_override :
grep public -B1 -r release/Magarena/scripts | awk '/Override/ {skip = NR + 1} NR != skip {print $$0}' | grep -v Override | grep release > $@
2014-07-31 06:43:03 -07:00
2016-06-07 23:58:06 -07:00
parse_new.txt : cards /existing_master .txt
2016-07-01 22:24:53 -07:00
cp ` grep status = not -Lr release/Magarena/scripts_missing/` release/Magarena/scripts
2014-07-31 06:43:03 -07:00
-rm 101.out
2016-07-19 02:54:22 -07:00
make parseMissing = true debug
2015-01-20 20:51:05 -08:00
grep "ERROR " 101.out | sed 's/java.lang.RuntimeException: //' | sed 's/\(ERROR.*\) \(cause: .*\)/\2 \1/' | sort > parse_missing.txt
2014-07-31 06:43:03 -07:00
grep OK 101.out | sed 's/OK card: //' | sort > parse_ok.txt
2015-01-20 19:43:50 -08:00
git clean -qf release/Magarena/scripts
2016-06-07 23:58:06 -07:00
join -v2 -t'_' $^ parse_ok.txt > $@
2015-01-20 19:43:50 -08:00
diff parse_new.ignore $@
2014-08-16 19:11:51 -07:00
2016-06-07 23:58:06 -07:00
parse_groovy.txt : cards /groovy .txt
2015-12-06 00:33:16 -08:00
cp scripts-builder/OUTPUT/scripts_missing/* release/Magarena/scripts
-rm 101.out
2016-07-19 02:54:22 -07:00
make parseMissing = true debug
2015-12-06 00:33:16 -08:00
grep "ERROR " 101.out | sed 's/java.lang.RuntimeException: //' | sed 's/\(ERROR.*\) \(cause: .*\)/\2 \1/' | sort > parse_missing.txt
grep OK 101.out | sed 's/OK card: //' | sort > parse_ok.txt
git checkout -- release/Magarena/scripts
2016-06-07 23:58:06 -07:00
join -t'_' <( sort $^) <( sort parse_ok.txt) > $@
2015-12-08 19:06:12 -08:00
diff parse_groovy.ignore $@
2015-12-06 00:33:16 -08:00
2016-06-07 23:58:06 -07:00
parse_groovy :
make cards/groovy.txt
cd scripts-builder && make gen-groovy
make parse_groovy.txt
2014-09-14 04:43:19 -07:00
# extract name<tab>image url from gallery page
%.tsv : %.html
grep "alt.*src.*media" $^ | sed 's/.*alt="\([^"]*\)".*src="\([^"]*\)".*/\1\t\2/' > $@
2014-10-08 19:51:10 -07:00
%.md :
curl https://code.google.com/p/magarena/wiki/$* \
| xmllint --html --xpath "//div[@id='wikicontent']" - \
| pandoc --from html --to markdown --no-wrap \
> $@
2015-03-18 19:32:04 -07:00
2015-12-29 05:48:09 -08:00
%.add : release /Magarena /scripts_missing /%.txt
2015-03-18 19:32:04 -07:00
git mv $^ release/Magarena/scripts
2015-12-29 05:48:09 -08:00
vim release/Magarena/scripts/$* .txt
2015-03-18 19:32:04 -07:00
$( eval NAME := $( shell grep "name=" $^ | sed 's/name=//' ) )
2015-12-29 05:48:09 -08:00
git add release/Magarena/scripts/$* .*
2015-03-18 19:32:04 -07:00
git commit -m " add ${ NAME } "
2015-03-21 20:19:56 -07:00
images.url : missing_images
cat $^ | parallel -k -q curl -G http://magiccards.info/query --data-urlencode 'q=!{}' | grep -o "http.*.jpg" > $@
2015-04-08 02:35:59 -07:00
2015-04-08 17:57:33 -07:00
model_usage :
for i in ` grep "class [A-Za-z]*" -hro src/magic/model | sed 's/class //' ` ; do echo -en " $$ i\t " ; grep $$ i -lr src release/Magarena/scripts | wc -l; done > $@
2015-04-27 04:23:20 -07:00
fix_indentation :
2015-04-27 20:09:48 -07:00
grep "^[ ]*" -r release/Magarena/scripts/*.groovy -o | awk -F':' 'length($$2) < 15 {print $$1 "\t" length($$2) % 4}' | grep -v 0 | cut -f1 | uniq | vim -
2015-04-29 20:58:35 -07:00
2015-12-31 01:57:06 -08:00
fix_trailing_space :
find release/Magarena/scripts -type f -exec sed --in-place 's/[[:space:]]\+$$//' { } +
2015-12-31 02:55:17 -08:00
find src -type f -exec sed --in-place 's/[[:space:]]\+$$//' { } +
2015-12-31 01:57:06 -08:00
2015-04-29 20:58:35 -07:00
update_card_property :
ls -1 replace/* | parallel -q sed -i 's/\([^=]*\)=\(.*\)/s|\1=.*|\1=\2|/;s/\\/\\\\/g'
ls -1 release/Magarena/scripts/*.txt | parallel -q sed -i -f replace/{ /} { }
2015-05-01 00:26:41 -07:00
sims_count :
grep "sims=[0-9]*" -r 14* -o -h | sed 's/sims=//' | sort -n | histogram.py -x 800 > $@
2015-05-31 19:48:55 -07:00
2015-12-06 01:36:55 -08:00
groovy-by-size :
ls -1Sr ` grep executeEvent release/Magarena/scripts/*.groovy -l` > $@
2016-01-25 21:34:01 -08:00
normalize_scripts.diff :
diff -d -ru -I rarity = -I removal = -I image -I enchant = -I effect = -I value = -I static = -I timing = -I mana = \
release/Magarena/scripts scripts-builder/OUTPUT/scripts_missing | grep -v Only > $@
2016-07-02 05:16:02 -07:00
sorted_status.txt :
grep status = -r release/Magarena/scripts_missing/ -h | sort | uniq > $@
2016-07-03 03:15:26 -07:00
echo "unknown" ` grep -L status = -r release/Magarena/scripts_missing | wc -l` >> $@
2016-07-02 05:16:02 -07:00
2015-11-29 04:56:32 -08:00
# export GITHUB_TOKEN=`cat token`
2015-05-31 19:48:55 -07:00
create-draft-release :
github-release release \
--user magarena \
--repo magarena \
--tag " ${ tag } " \
--name " ${ name } " \
--draft
upload-lin-release :
github-release upload \
--user magarena \
--repo magarena \
--tag " ${ tag } " \
--name " Magarena- ${ tag } .zip " \
--file Magarena-${ tag } .zip
upload-mac-release :
github-release upload \
--user magarena \
--repo magarena \
--tag " ${ tag } " \
--name " Magarena- ${ tag } .app.zip " \
--file Magarena-${ tag } .app.zip
2015-10-31 20:53:13 -07:00
github-releases.json :
curl https://api.github.com/repos/magarena/magarena/releases > $@
correct-release-label :
2016-07-31 07:04:13 -07:00
curl -XPATCH https://api.github.com/repos/magarena/magarena/releases/assets/${ mac } -H"Content-Type: application/json" -d'{"name": "Magarena-${tag}.app.zip", "label":"Magarena-${tag}.app.zip for Mac"}' -u ${ username }
curl -XPATCH https://api.github.com/repos/magarena/magarena/releases/assets/${ linux } -H"Content-Type: application/json" -d'{"name": "Magarena-${tag}.zip", "label":"Magarena-${tag}.zip for Linux/Windows"}' -u ${ username }
2016-08-29 17:57:54 -07:00
%_img.tsv :
paste <( cat conspiracy-take-crown | pup 'img attr{alt}' ) <( cat conspiracy-take-crown | pup 'img attr{src}' ) > $@
# edit tsv file to use only ASCII characters
%_fix_image :
grep /$* / -r release/Magarena/scripts_missing release/Magarena/scripts -l | parallel awk -f scripts/update_image.awk $* _img.tsv { } '>' { } .new
grep /$* / -r release/Magarena/scripts_missing/*.txt release/Magarena/scripts/*.txt -l | parallel mv { } .new { }