add a shell script port of shade.vbs

This commit is contained in:
Rudolf Polzer 2010-09-26 16:23:34 +02:00
parent 84c897e857
commit 0c6082674f

View File

@ -0,0 +1,119 @@
#!/bin/sh
case "$#" in
2)
;;
*)
echo "Usage: $1 directory shader.template"
exit 1
;;
esac
LF="
"
exec 3>"scripts/$1.shader"
template=`cat "$2"`
find "textures/$1" -type f -path "textures/*/*/*.*" -not -name '*_norm.*' -not -name '*_glow.*' -not -name '*_gloss.*' -not -name '*_reflect.*' -not -name '*.xcf' | while IFS= read -r F; do
F=${F%.*}
noLightmap=false
isLiquid=false
isTransparent=false
bounceScale=1.00
shaderString="$template"
shaderHead=
shaderTail=
shaderQUI=
shaderDiffuse=
diffuseExtra=
case "$F" in
*decal*)
noLightmap=true
;;
esac
# material type
case "$F" in
*water*)
noLightmap=true
isLiquid=true
shaderHead="$shaderHead surfaceparm trans\n surfaceparm water\n qer_trans 20\n"
;;
*slime*)
noLightmap=true
isLiquid=true
shaderHead="$shaderHead surfaceparm trans\n surfaceparm slime\n qer_trans 20\n"
;;
*lava*)
noLightmap=true
isLiquid=true
shaderHead="$shaderHead surfaceparm trans\n surfaceparm lava\n qer_trans 20\n"
;;
*glass*)
noLightmap=true
shaderHead="$shaderHead surfaceparm trans\n"
diffuseExtra="$diffuseExtra blendfunc add\n"
;;
*metal*)
bounceScale=`echo "$bounceScale + 0.25" | bc -l`
shaderHead="$shaderHead surfaceparm metalsteps\n"
;;
esac
# what is it used for
case "$F" in
*grate*)
bounceScale=`echo "$bounceScale + 0.25" | bc -l`
shaderHead="$shaderHead surfaceparm trans\n"
diffuseExtra="$diffuseExtra blendfunc blend\n"
;;
esac
# further properties
case "$F" in
*shiny*)
bounceScale=`echo "$bounceScale + 0.25" | bc -l`
;;
esac
case "$F" in
*dirt*|*terrain*|*old*)
bounceScale=`echo "$bounceScale - 0.25" | bc -l`
shaderHead="$shaderHead surfaceparm dust\n"
;;
esac
shaderDiffuse="$F"
if [ -f "$F""_gloss.tga" ] || [ -f "$F""_gloss.jpg" ] || [ -f "$F""_gloss.png" ]; then
bounceScale=`echo "$bounceScale - 0.25" | bc -l`
fi
if [ -f "$F""_qei.tga" ] || [ -f "$F""_qei.jpg" ] || [ -f "$F""_qei.png" ]; then
shaderQUI="$F""_qei"
else
shaderQUI="$F"
fi
if ! $noLightmap; then
shaderTail=" {\n map \$lightmap\n rgbGen identity\n tcGen lightmap\n blendfunc filter\n }"
fi
case "$bounceScale" in
1|1.0|1.00)
;;
*)
shaderHead="$shaderHead q3map_bouncescale $bounceScale\n"
;;
esac
shaderName="`echo "$F" | cut -d / -f 1-2`/`echo "$F" | cut -d / -f 3`-`echo "$F" | cut -d / -f 4`"
echo "$shaderString$LF$LF" | sed -e "
s,%shader_name%,$shaderName,g;
s,%qei_name%,$shaderQUI,g;
s,%shader_head%,$shaderHead,g;
s,%diffuse_map%,$shaderDiffuse,g;
s,%diffuse_map_extra%,$diffuseExtra,g;
s,%shader_tail%,$shaderTail,g;
" >&3
done