--- /dev/null
+#!/bin/sh
+
+printf 'gamedata = {\n'
+for base in mods/fantasycore mods/empyrean_campaign; do
+ find $base/animations -name '*.txt' |while read -r file; do
+ file="${file#"${base}"}"
+ printf '"%s": {\n' "$file"
+ sed -E '
+ # read entire file into buffer
+ :X N; $!bX; s;$;\n;; s;^;\n;; s;\r\n;\n;g;
+
+ # Comment and empty lines
+ :Y s;\n#[^\n]*\n;\n;g; tY;
+
+ # INCLUDE, APPEND
+ s;\nAPPEND\n;\n;g;
+ s;\nINCLUDE ([^\n]+)\n;\n"INCLUDE": "\1"\n;g;
+
+ # section heading, eg. [stance]
+ s;\n\[([^\n]+)\]\n(([^]\n[]+\n)+);"\1": {\n\2 },\n;g;
+
+ # frame list start
+ s;\nframes=[0-9]+\n;\n;g;
+ s;(\nframe=[^\n]+)+;\n"frames": [&;g;
+
+ # frame list, 8 angles isometric
+ 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
+ # frame list, workaround for bug in avatar/female/dagger.txt
+ 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
+ # frame list, workaround for bug in avatar/male/greatsword.txt
+ 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
+ # frame list, workaround for bug in avatar/male/slingshot.txt
+ 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
+ # frame list, 6 angles e.g. powers/freeze.txt
+ 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
+ # frame list, 4 angles e.g. powers/spikes.txt
+ 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
+ # frame list, 3 angles e.g. powers/quake.txt
+ 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
+ # frame list, 2 angles e.g. powers/blast.txt
+ s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\n;[[\1], [\2]],\n;g
+ # frame list, front angle only
+ s;frame=[0-9]+,0,([0-9,-]+)\n;[[\1]],\n;g
+
+ # frame list end
+ s;("frames": []\n,0-9 [-]+),;\1\n],;g;
+
+ # animation duration
+ s;\n(duration)=([0-9]+)ms\n;\n"\1": \2,\n;g
+ s;\n(duration)=([0-9]+)s\n;\n"\1": \2000,\n;g
+
+ :general
+ # general scalar
+ s;\n([^=\n]+)=([0-9-]+)\n;\n"\1": \2,\n;g
+
+ # general array
+ s;\n([^=\n]+)=([0-9,-]+)\n;\n"\1": [\2],\n;g
+
+ # general text
+ s;\n([^=\n]+)=([^\n]+)\n;\n"\1": "\2",\n;g
+ tgeneral;
+ ' "${base}${file}"
+ printf '},\n'
+ done
+done
+printf '}\n'
<html><head>
<title>FlareJS</title>
</head><body>
- <canvas id="view" width=640 height=480 style="border: 1px solid red;"></canvas>
- <img src="images/avatar/male/clothes.png" style="display: none;" />
+ <canvas id="view" width=480 height=320 style="border: 1px solid red;"></canvas>
+ $(
+ for base in mods/fantasycore mods/empyrean_campaign; do
+ find $base/images/avatar $base/images/enemies -name '*.png' |while read -r file; do
+ file="${file#"${base}/"}"
+ printf '<img src="%s" style="display: none;" />' "$file"
+ done
+ done)
<script type="text/javascript" src="/data.js"></script>
<script type="text/javascript" src="/engine.js"></script>
</body></html>
EOF
-elif [ "$_PATH" = "/data.js" -a data.js -nt "$0" ]; then
- FILE data.js
-elif [ "$_PATH" = "/data.js" -a ! data.js -nt "$0" ]; then
- printf 'Content-Type: text/javascript\r\n\r\n'
- {
- printf 'gamedata = {\n'
- for base in /usr/share/games/flare/mods/fantasycore /usr/share/games/flare/mods/empyrean_campaign; do
- find $base/animations -name '*.txt' |while read -r file; do
- file="${file#"${base}"}"
- printf '"%s": {\n' "$file"
- sed -E '
- # read entire file into buffer
- :X N; $!bX; s;$;\n;; s;^;\n;; s;\r\n;\n;g;
-
- # Comment and empty lines
- :Y s;\n#[^\n]*\n;\n;g; tY;
-
- # INCLUDE, APPEND
- s;\nAPPEND\n;\n;g;
- s;\nINCLUDE ([^\n]+)\n;\n"INCLUDE": "\1"\n;g;
-
- # section heading, eg. [stance]
- s;\n\[([^\n]+)\]\n(([^]\n[]+\n)+);"\1": {\n\2 },\n;g;
-
- # frame list start
- s;\nframes=[0-9]+\n;\n;g;
- s;(\nframe=[^\n]+)+;\n"frames": [&;g;
-
- # frame list, 8 angles isometric
- 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
- # frame list, workaround for bug in avatar/female/dagger.txt
- 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
- # frame list, workaround for bug in avatar/male/greatsword.txt
- 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
- # frame list, workaround for bug in avatar/male/slingshot.txt
- 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
- # frame list, 6 angles e.g. powers/freeze.txt
- 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
- # frame list, 4 angles e.g. powers/spikes.txt
- 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
- # frame list, 3 angles e.g. powers/quake.txt
- 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
- # frame list, 2 angles e.g. powers/blast.txt
- s;frame=[0-9]+,0,([0-9,-]+)\nframe=[0-9]+,1,([0-9,-]+)\n;[[\1], [\2]],\n;g
- # frame list, front angle only
- s;frame=[0-9]+,0,([0-9,-]+)\n;[[\1]],\n;g
-
- # frame list end
- s;("frames": []\n,0-9 [-]+),;\1\n],;g;
-
- # animation duration
- s;\n(duration)=([0-9]+)ms\n;\n"\1": \2,\n;g
- s;\n(duration)=([0-9]+)s\n;\n"\1": \2000,\n;g
-
- :general
- # general scalar
- s;\n([^=\n]+)=([0-9-]+)\n;\n"\1": \2,\n;g
-
- # general array
- s;\n([^=\n]+)=([0-9,-]+)\n;\n"\1": [\2],\n;g
-
- # general text
- s;\n([^=\n]+)=([^\n]+)\n;\n"\1": "\2",\n;g
- tgeneral;
- ' "${base}${file}"
- printf '},\n'
- done
- done
- printf '}\n'
- } |tee data.js
else
- for base in . /usr/share/games/flare/mods/empyrean_campaign /usr/share/games/flare/mods/fantasycore /usr/share/games/flare/mods/default; do
+ for base in . \
+ ./mods/empyrean_campaign \
+ ./mods/fantasycore \
+ ./mods/default; do
[ -f "${base}/$_PATH" ] && FILE "${base}/$_PATH"
done
fi