#!/bin/sh . cgilite/cgilite.sh . cgilite/file.sh _PATH="$(PATH "${PATH_INFO}")" if [ "$_PATH" = / ]; then printf 'Content-Type: text/html\r\n\r\n' cat <<-EOF FlareJS 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 [ -f "${base}/$_PATH" ] && FILE "${base}/$_PATH" done fi