]> git.plutz.net Git - flarejs/blob - data.sh
generate js gamedata file statically
[flarejs] / data.sh
1 #!/bin/sh
2
3 printf 'gamedata = {\n'
4 for base in mods/fantasycore mods/empyrean_campaign; do
5   find $base/animations -name '*.txt' |while read -r file; do
6     file="${file#"${base}"}"
7     printf '"%s": {\n' "$file"
8     sed -E '
9       # read entire file into buffer
10       :X N; $!bX; s;$;\n;; s;^;\n;; s;\r\n;\n;g;
11
12       # Comment and empty lines
13       :Y s;\n#[^\n]*\n;\n;g; tY;
14
15       # INCLUDE, APPEND
16       s;\nAPPEND\n;\n;g;
17       s;\nINCLUDE ([^\n]+)\n;\n"INCLUDE": "\1"\n;g;
18
19       # section heading, eg. [stance]
20       s;\n\[([^\n]+)\]\n(([^]\n[]+\n)+);"\1": {\n\2 },\n;g;
21
22       # frame list start
23       s;\nframes=[0-9]+\n;\n;g;
24       s;(\nframe=[^\n]+)+;\n"frames": [&;g;
25
26       # frame list, 8 angles isometric
27       s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,2,([0-9,-]+)\nframe=[0-9]+,3,([0-9,-]+)\nframe=[0-9]+,4,([0-9,-]+)\nframe=[0-9]+,5,([0-9,-]+)\nframe=[0-9]+,6,([0-9,-]+)\nframe=[0-9]+,7,([0-9,-]+)\n;[[\1], [\2], [\3], [\4], [\5], [\6], [\7], [\8]],\n;g
28       # frame list, workaround for bug in avatar/female/dagger.txt
29       s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,3,([0-9,-]+)\nframe=[0-9]+,4,([0-9,-]+)\nframe=[0-9]+,5,([0-9,-]+)\nframe=[0-9]+,6,([0-9,-]+)\nframe=[0-9]+,7,([0-9,-]+)\n;[[\1], [\2], [0,0,0,0,0,0], [\3], [\4], [\5], [\6], [\7]],\n;g
30       # frame list, workaround for bug in avatar/male/greatsword.txt
31       s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,2,([0-9,-]+)\nframe=[0-9]+,3,([0-9,-]+)\nframe=[0-9]+,4,([0-9,-]+)\nframe=[0-9]+,5,([0-9,-]+)\nframe=[0-9]+,7,([0-9,-]+)\n;[[\1], [\2], [\3], [\4], [\5], [\6], [0,0,0,0,0,0], [\7]],\n;g
32       # frame list, workaround for bug in avatar/male/slingshot.txt
33       s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,2,([0-9,-]+)\nframe=[0-9]+,4,([0-9,-]+)\nframe=[0-9]+,5,([0-9,-]+)\nframe=[0-9]+,6,([0-9,-]+)\nframe=[0-9]+,7,([0-9,-]+)\n;[[\1], [\2], [\3], [0,0,0,0,0,0], [\4], [\5], [\6], [\7]],\n;g
34       # frame list, 6 angles e.g. powers/freeze.txt
35       s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,2,([0-9,-]+)\nframe=[0-9]+,3,([0-9,-]+)\nframe=[0-9]+,4,([0-9,-]+)\nframe=[0-9]+,5,([0-9,-]+)\n;[[\1], [\2], [\3], [\4], [\5], [\6]],\n;g
36       # frame list, 4 angles e.g. powers/spikes.txt
37       s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,2,([0-9,-]+)\nframe=[0-9]+,3,([0-9,-]+)\n;[[\1], [\2], [\3], [\4]],\n;g
38       # frame list, 3 angles e.g. powers/quake.txt
39       s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\nframe=[0-9]+,2,([0-9,-]+)\n;[[\1], [\2], [\3]],\n;g
40       # frame list, 2 angles e.g. powers/blast.txt
41       s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\n;[[\1], [\2]],\n;g
42       # frame list, front angle only
43       s;frame=[0-9]+,0,([0-9,-]+)\n;[[\1]],\n;g
44
45       # frame list end
46       s;("frames": []\n,0-9 [-]+),;\1\n],;g;
47
48       # animation duration
49       s;\n(duration)=([0-9]+)ms\n;\n"\1": \2,\n;g
50       s;\n(duration)=([0-9]+)s\n;\n"\1": \2000,\n;g
51
52       :general
53         # general scalar
54         s;\n([^=\n]+)=([0-9-]+)\n;\n"\1": \2,\n;g
55
56         # general array
57         s;\n([^=\n]+)=([0-9,-]+)\n;\n"\1": [\2],\n;g
58
59         # general text
60         s;\n([^=\n]+)=([^\n]+)\n;\n"\1": "\2",\n;g
61       tgeneral;
62     ' "${base}${file}"
63     printf '},\n'
64   done
65 done
66 printf '}\n'