shithub: sce

ref: 6be6bc64459a8790b1e5020d61e482d0b1d7b84d
dir: /utils/genspr2/

View raw version
#!/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