ref: 6be6bc64459a8790b1e5020d61e482d0b1d7b84d
dir: /utils/genspr2/
#!/bin/rc -e
rfork n
bind -a $home/p/pico /bin
bind -a $home/p/sce/utils /bin
awk -v 'pid='$pid '
function pipe(cmd){
if((cmd | getline x) != 1){
print cmd ": aborted"
exit("aborted")
}
return x
}
function exec(cmd){
if(system(cmd) != 0){
print cmd ": aborted"
exit("aborted")
}
}
function unit17(u, i, r, n, fi, fo, gf, dim, rect, Δx, Δy){
n = split(units[u], a)
gf = u ".grp"
split(pipe("grp -s " palfile " " gf), dim)
for(i=4; i<=n; i++){
frm = a[i] * 17;
for(r=0; r<17; r+=2){
fi = sprintf(gf ".%05d.bit", frm + r)
fo = sprintf(u ".%02d.%02d.bit", frm, r)
fs = sprintf(u ".%02d.%02d.s.bit", frm, r)
split(pipe("read -c 60 " fi), rect)
goff = -(dim[1] / 2 - a[1])
Δx = rect[2] + goff
Δy = rect[3] + goff
exec("scespr " fi " " fo " " Δx " " Δy);
if(a[2] != "-")
exec("sceshad " fi " " fs " " Δx+a[2] " " Δy+a[3] " " a[2] " " a[3]);
if(r != 16){
exec("rotate -l " fi " >" tmp)
Δx += dim[1] - rect[2] - rect[4]
fo = sprintf(u ".%02d.%02d.bit", frm, 31-r)
fs = sprintf(u ".%02d.%02d.s.bit", frm, 31-r)
exec("scespr " tmp " " fo " " Δx " " Δy);
if(a[2] != "-")
exec("sceshad " tmp " " fs " " Δx+a[2] " " Δy+a[3] " " a[2] " " a[3]);
}
}
}
exec("rm -f " gf ".*bit")
}
BEGIN{
palfile = "SC_Unit_Palette.pal"
tmp = "/tmp/genspr." pid
units["scv"] = "11 0 7 0"
units["drone"] = "11 0 7 0 1 2 3 4"
units["mutalid"] = "22 0 42 0 1 2 3 4"
for(u in units){
unit17(u)
}
}
END{
exec("rm -f " tmp)
}
'
# FIXME:
# - setup: grp files, pal, etc.; tmp workspace
# . ramfs + window -m for monitoring
# . copy to final destination on success
# - tileset, buildings + shadows, asprite
# - testing