summaryrefslogtreecommitdiff
path: root/unifieddyes/gentextures.sh
diff options
context:
space:
mode:
Diffstat (limited to 'unifieddyes/gentextures.sh')
-rw-r--r--unifieddyes/gentextures.sh177
1 files changed, 177 insertions, 0 deletions
diff --git a/unifieddyes/gentextures.sh b/unifieddyes/gentextures.sh
new file mode 100644
index 0000000..842817e
--- /dev/null
+++ b/unifieddyes/gentextures.sh
@@ -0,0 +1,177 @@
+#!/bin/bash
+
+# This program auto-generates colorized textures for all 89 of the Unified
+# Dyes colors, based on one or two input files.
+
+# Copyright (C) 2012-2013, Vanessa Ezekowitz
+# Email: vanessaezekowitz@gmail.com
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+if [ -z "`which convert`" ] ; then {
+ echo "Please install Imagemagick."
+ exit 1
+} fi
+
+if [ -z "`which bc`" ] ; then {
+ echo "Please install GNU bc."
+ exit 1
+} fi
+
+if [ $1 = "-t" ] ; then {
+ TINT_OVERLAY=$1
+ BASE=$2
+ COMPOSITE=$3
+} else {
+ TINT_OVERLAY=""
+ BASE=$1
+ COMPOSITE=$2
+} fi
+
+if [ -z $1 ] || [ $1 == "--help" ] || [ $1 == "-h" ] || [[ $1 == "-t" && -z $3 ]] ; then {
+
+ echo -e "\nUsage:
+\ngentextures.sh basename [overlay_filename]
+gentextures.sh -t basename overlay_filename
+\nThis script requires up to three parameters which supply the base filename
+of the textures, an optional overlay, and possibly the '-t' switch. The
+'basename' is the first part of the filename that your textures will use when
+your mod is done, which should almost always be the same as the one-word name
+of your mod. For example, if you supply the word 'mymod', this script will
+produce filenames like mymod_red.png or 'mymod_dark_blue_s50.png'. The
+texture that this script will read and recolor is derived from this parameter,
+and will be of the form 'basename_base.png', i.e. 'mymod_base.png'.
+\nYou can also supply an optional overlay image filename. This image will be
+composited onto the output files after they have been colorized, but without
+being modified. This is useful when you have some part of your base image
+that will either get changed undesirably (for example, the mortar among
+several bricks, or the shading detail of a stone pattern). Simply draw two
+images: one containing the whole image to be colored, and one containing the
+parts that should not be changed, with either full or partial alpha
+transparency where the re-colored base image should show through. Skilled use
+of color and alpha on this overlay can lead to some interesting effects.
+\nIf you add '-t' as the first parameter, the script will switch to 'tint
+overlay' mode. For this mode to work, you must also supply the base name as
+usual, and you must include an overlay image filename. Rather than re-color
+the base texture, the script will alter the hue/saturation/value of the
+overlay texture file instead, and leave the base texture unchanged. When
+using this mode, the base texture should be drawn in some neutral color, but
+any color is fine if it results in what you wanted.\n"
+ exit 1
+} fi
+
+if [[ ! -e $BASE"_base.png" ]]; then {
+ echo -e "\nThe basename '"$BASE"_base.png' was not found."
+ echo -e "\nAborting.\n"
+ exit 1
+} fi
+
+if [[ ! -z $COMPOSITE && ! -e $COMPOSITE ]]; then {
+ echo -e "\nThe requested composite file '"$COMPOSITE"' was not found."
+ echo -e "\nAborting.\n"
+ exit 1
+} fi
+
+convert $BASE"_base.png" -modulate 1,2,3 tempfile.png 1>/dev/null 2>/dev/null
+
+if (( $? )) ; then {
+ echo -e "\nImagemagick failed while testing the base texture file."
+ echo -e "\nEither the base file '"$BASE"_base.png' isn't an image,"
+ echo "or it is broken, or Imagemagick itself just didn't work."
+ echo -e "\nPlease check and correct your base image and try again."
+ echo -e "\nAborting.\n"
+ exit 1
+} fi
+
+if [ ! -z $COMPOSITE ] ; then {
+ convert $BASE"_base.png" -modulate 1,2,3 $COMPOSITE -composite tempfile.png 1>/dev/null 2>/dev/null
+
+ if (( $? )) ; then {
+ echo -e "\nImagemagick failed while testing the composite file."
+ echo -e "\nEither the composite file '"$COMPOSITE"' isn't an image"
+ echo "or it is broken, or Imagemagick itself just didn't work."
+ echo -e "\nPlease check and correct your composite image and try again."
+ echo -e "\nAborting.\n"
+ exit 1
+ } fi
+} fi
+
+rm tempfile.png
+
+base_colors="red orange yellow lime green aqua cyan skyblue blue violet magenta redviolet"
+
+echo -e -n "\nGenerating filenames based on "$BASE"_base.png"
+if [ ! -z $COMPOSITE ] ; then {
+ echo ","
+ echo -n "using "$COMPOSITE" as an overlay"
+} fi
+
+if [ ! -z $TINT_OVERLAY ] ; then {
+ echo ","
+ echo -n "and tinting the overlay instead of the base texture"
+} fi
+
+echo -e "...\n"
+
+mkdir -p generated-textures
+
+function generate_texture () {
+ name=$1
+ h=$2
+ s=$3
+ v=$4
+ if [ -z $TINT_OVERLAY ]; then {
+ if [ -z $COMPOSITE ]; then {
+ convert $BASE"_base.png" -modulate $v,$s,$h "generated-textures/"$BASE"_"$name".png"
+ } else {
+ convert $BASE"_base.png" -modulate $v,$s,$h $COMPOSITE -composite "generated-textures/"$BASE"_"$name".png"
+ } fi
+ } else {
+ convert $COMPOSITE -modulate $v,$s,$h MIFF:- | composite MIFF:- $BASE"_base.png" "generated-textures/"$BASE"_"$name".png"
+ } fi
+}
+
+hue=0
+for color_name in $base_colors ; do
+ hue2=`echo "scale=10; ("$hue"*200/360)+100" |bc`
+ echo $color_name "("$hue" degrees)"
+ echo " dark"
+ generate_texture "dark_"$color_name $hue2 100 33
+ echo " medium"
+ generate_texture "medium_"$color_name $hue2 100 66
+ echo " full"
+ generate_texture $color_name $hue2 100 100
+ echo " light"
+ generate_texture "light_"$color_name $hue2 100 150
+ echo " dark, 50% saturation"
+ generate_texture "dark_"$color_name"_s50" $hue2 50 33
+ echo " medium, 50% saturation"
+ generate_texture "medium_"$color_name"_s50" $hue2 50 66
+ echo " full, 50% saturation"
+ generate_texture $color_name"_s50" $hue2 50 100
+ hue=$((hue+30))
+done
+
+echo "greyscales"
+echo " black"
+generate_texture black 0 0 15
+echo " dark grey"
+generate_texture darkgrey 0 0 50
+echo " medium grey"
+generate_texture grey 0 0 100
+echo " light grey"
+generate_texture lightgrey 0 0 150
+echo " white"
+generate_texture white 0 0 190