1
0
Fork 0
MineClone2/tools/libtextureconverter/special_convert_cases.py

810 lines
30 KiB
Python

import os
from .utils import target_dir, colorize, colorize_alpha
import shutil
import csv
import tempfile
import sys
import argparse
import glob
from wand.image import Image
from wand.color import Color
from wand.display import display
from wand.drawing import Drawing
import warnings
# Conversion of map backgrounds
def convert_map_textures(
make_texture_pack,
dry_run,
verbose,
base_dir,
tex_dir,
tempfile1,
tempfile2,
output_dir,
output_dir_name,
mineclone2_path,
PXSIZE):
# Convert map background
map_background_file = tex_dir + "/map/map_background.png"
if os.path.isfile(map_background_file):
destination_path = target_dir("/mods/ITEMS/mcl_maps/textures", make_texture_pack, output_dir, output_dir_name, mineclone2_path) + "/mcl_maps_map_background.png"
with Image(filename=map_background_file) as img:
# Resize the image with 'point' filter
img.resize(140, 140, filter='point')
# Save the result
img.save(filename=destination_path)
# Convert armor textures
def convert_armor_textures(
make_texture_pack,
dry_run,
verbose,
base_dir,
tex_dir,
tempfile1,
tempfile2,
output_dir,
output_dir_name,
mineclone2_path,
PXSIZE):
# Convert armor textures (requires ImageMagick)
armor_files = [[tex_dir + "/models/armor/leather_layer_1.png",
tex_dir + "/models/armor/leather_layer_2.png",
target_dir("/mods/ITEMS/mcl_armor/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path),
"mcl_armor_helmet_leather.png",
"mcl_armor_chestplate_leather.png",
"mcl_armor_leggings_leather.png",
"mcl_armor_boots_leather.png"],
[tex_dir + "/models/armor/chainmail_layer_1.png",
tex_dir + "/models/armor/chainmail_layer_2.png",
target_dir("/mods/ITEMS/mcl_armor/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path),
"mcl_armor_helmet_chain.png",
"mcl_armor_chestplate_chain.png",
"mcl_armor_leggings_chain.png",
"mcl_armor_boots_chain.png"],
[tex_dir + "/models/armor/gold_layer_1.png",
tex_dir + "/models/armor/gold_layer_2.png",
target_dir("/mods/ITEMS/mcl_armor/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path),
"mcl_armor_helmet_gold.png",
"mcl_armor_chestplate_gold.png",
"mcl_armor_leggings_gold.png",
"mcl_armor_boots_gold.png"],
[tex_dir + "/models/armor/iron_layer_1.png",
tex_dir + "/models/armor/iron_layer_2.png",
target_dir("/mods/ITEMS/mcl_armor/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path),
"mcl_armor_helmet_iron.png",
"mcl_armor_chestplate_iron.png",
"mcl_armor_leggings_iron.png",
"mcl_armor_boots_iron.png"],
[tex_dir + "/models/armor/diamond_layer_1.png",
tex_dir + "/models/armor/diamond_layer_2.png",
target_dir("/mods/ITEMS/mcl_armor/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path),
"mcl_armor_helmet_diamond.png",
"mcl_armor_chestplate_diamond.png",
"mcl_armor_leggings_diamond.png",
"mcl_armor_boots_diamond.png"],
[tex_dir + "/models/armor/netherite_layer_1.png",
tex_dir + "/models/armor/netherite_layer_2.png",
target_dir("/mods/ITEMS/mcl_armor/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path),
"mcl_armor_helmet_netherite.png",
"mcl_armor_chestplate_netherite.png",
"mcl_armor_leggings_netherite.png",
"mcl_armor_boots_netherite.png"]]
for a in armor_files:
APXSIZE = 16 # for some reason MineClone2 requires this
layer_1 = a[0]
layer_2 = a[1]
adir = a[2]
if os.path.isfile(layer_1):
helmet = adir + "/" + a[3]
chestplate = adir + "/" + a[4]
boots = adir + "/" + a[6]
# helmet
os.system("convert -size " +
str(APXSIZE *
4) +
"x" +
str(APXSIZE *
2) +
" xc:none \\( " +
layer_1 +
" -scale " +
str(APXSIZE *
4) +
"x" +
str(APXSIZE *
2) +
" -geometry +" +
str(APXSIZE *
2) +
"+0 -crop " +
str(APXSIZE *
2) +
"x" +
str(APXSIZE) +
"+0+0 \\) -composite -channel A -fx \"(a > 0.0) ? 1.0 : 0.0\" " +
helmet)
# chestplate
with Image(width=APXSIZE * 4, height=APXSIZE * 2, background=Color('none')) as img:
# Load layer_1 and scale
with Image(filename=layer_1) as layer1:
layer1.resize(APXSIZE * 4, APXSIZE * 2)
# Define the crop geometry
crop_width = int(APXSIZE * 2.5)
crop_height = APXSIZE
crop_x = APXSIZE
crop_y = APXSIZE
# Crop the image
layer1.crop(crop_x, crop_y, width=crop_width, height=crop_height)
# Composite layer1 over the transparent image
img.composite(layer1, APXSIZE, APXSIZE)
# Apply channel operation
img.fx("a > 0.0 ? 1.0 : 0.0", channel='alpha')
# Save the result
img.save(filename=chestplate)
with Image(width=APXSIZE * 4, height=APXSIZE * 2, background=Color('none')) as img:
with Image(filename=layer_1) as layer1:
# Scale the image
layer1.resize(APXSIZE * 4, APXSIZE * 2)
# Crop the image
crop_x = 0
crop_y = APXSIZE
crop_width = APXSIZE
crop_height = APXSIZE
layer1.crop(crop_x, crop_y, width=crop_width, height=crop_height)
# Composite the cropped image over the transparent image
img.composite(layer1, 0, APXSIZE)
# Apply the channel operation
img.fx("a > 0.0 ? 1.0 : 0.0", channel='alpha')
# Save the result
img.save(filename=boots)
if os.path.isfile(layer_2):
leggings = adir + "/" + a[5]
with Image(width=APXSIZE * 4, height=APXSIZE * 2, background=Color('none')) as img:
with Image(filename=layer_2) as layer2:
# Scale the image
layer2.resize(APXSIZE * 4, APXSIZE * 2)
# Apply geometry and crop
crop_width = int(APXSIZE * 2.5)
crop_height = APXSIZE
crop_x = 0
crop_y = APXSIZE
layer2.crop(left=crop_x, top=crop_y, width=crop_width, height=crop_height)
# Composite the cropped image over the transparent image
img.composite(layer2, 0, APXSIZE)
# Apply channel operation
img.fx("a > 0.0 ? 1.0 : 0.0", channel='alpha')
# Save the result
img.save(filename=leggings)
# Convert chest textures
def convert_chest_textures(
make_texture_pack,
dry_run,
verbose,
base_dir,
tex_dir,
tempfile1,
tempfile2,
output_dir,
output_dir_name,
mineclone2_path,
PXSIZE):
# Convert chest textures (requires ImageMagick)
chest_files = [[tex_dir + "/entity/chest/normal.png",
target_dir("/mods/ITEMS/mcl_chests/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path),
"default_chest_top.png",
"mcl_chests_chest_bottom.png",
"default_chest_front.png",
"mcl_chests_chest_left.png",
"mcl_chests_chest_right.png",
"mcl_chests_chest_back.png"],
[tex_dir + "/entity/chest/trapped.png",
target_dir("/mods/ITEMS/mcl_chests/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path),
"mcl_chests_chest_trapped_top.png",
"mcl_chests_chest_trapped_bottom.png",
"mcl_chests_chest_trapped_front.png",
"mcl_chests_chest_trapped_left.png",
"mcl_chests_chest_trapped_right.png",
"mcl_chests_chest_trapped_back.png"],
[tex_dir + "/entity/chest/ender.png",
target_dir("/mods/ITEMS/mcl_chests/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path),
"mcl_chests_ender_chest_top.png",
"mcl_chests_ender_chest_bottom.png",
"mcl_chests_ender_chest_front.png",
"mcl_chests_ender_chest_left.png",
"mcl_chests_ender_chest_right.png",
"mcl_chests_ender_chest_back.png"]]
for c in chest_files:
chest_file = c[0]
if os.path.isfile(chest_file):
PPX = (PXSIZE / 16)
CHPX = (PPX * 14) # Chest width
LIDPX = (PPX * 5) # Lid height
LIDLOW = (PPX * 10) # Lower lid section height
LOCKW = (PPX * 6) # Lock width
LOCKH = (PPX * 5) # Lock height
cdir = c[1]
top = cdir + "/" + c[2]
bottom = cdir + "/" + c[3]
front = cdir + "/" + c[4]
left = cdir + "/" + c[5]
right = cdir + "/" + c[6]
back = cdir + "/" + c[7]
# Top
os.system("convert " + chest_file + " \
\\( -clone 0 -crop " + str(CHPX) + "x" + str(CHPX) + "+" + str(CHPX) + "+0 \\) -geometry +0+0 -composite -extent " + str(CHPX) + "x" + str(CHPX) + " " + top)
# Bottom
os.system("convert " + chest_file + " \
\\( -clone 0 -crop " + str(CHPX) + "x" + str(CHPX) + "+" + str(CHPX * 2) + "+" + str(CHPX + LIDPX) + " \\) -geometry +0+0 -composite -extent " + str(CHPX) + "x" + str(CHPX) + " " + bottom)
# Front
os.system("convert " + chest_file + " \
\\( -clone 0 -crop " + str(CHPX) + "x" + str(LIDPX) + "+" + str(CHPX) + "+" + str(CHPX) + " \\) -geometry +0+0 -composite \
\\( -clone 0 -crop " + str(CHPX) + "x" + str(LIDLOW) + "+" + str(CHPX) + "+" + str(CHPX * 2 + LIDPX) + " \\) -geometry +0+" + str(LIDPX - PPX) + " -composite \
-extent " + str(CHPX) + "x" + str(CHPX) + " " + front)
# TODO: Add lock
# Left, right back (use same texture, we're lazy
files = [left, right, back]
for f in files:
os.system("convert " + chest_file + " \
\\( -clone 0 -crop " + str(CHPX) + "x" + str(LIDPX) + "+" + str(0) + "+" + str(CHPX) + " \\) -geometry +0+0 -composite \
\\( -clone 0 -crop " + str(CHPX) + "x" + str(LIDLOW) + "+" + str(0) + "+" + str(CHPX * 2 + LIDPX) + " \\) -geometry +0+" + str(LIDPX - PPX) + " -composite \
-extent " + str(CHPX) + "x" + str(CHPX) + " " + f)
# Double chests
chest_files = [[tex_dir + "/entity/chest/normal_double.png",
target_dir("/mods/ITEMS/mcl_chests/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path),
"default_chest_front_big.png",
"default_chest_top_big.png",
"default_chest_side_big.png"],
[tex_dir + "/entity/chest/trapped_double.png",
target_dir("/mods/ITEMS/mcl_chests/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path),
"mcl_chests_chest_trapped_front_big.png",
"mcl_chests_chest_trapped_top_big.png",
"mcl_chests_chest_trapped_side_big.png"]]
for c in chest_files:
chest_file = c[0]
if os.path.isfile(chest_file):
PPX = (PXSIZE / 16)
CHPX = (PPX * 14) # Chest width (short side)
CHPX2 = (PPX * 15) # Chest width (long side)
LIDPX = (PPX * 5) # Lid height
LIDLOW = (PPX * 10) # Lower lid section height
LOCKW = (PPX * 6) # Lock width
LOCKH = (PPX * 5) # Lock height
cdir = c[1]
front = cdir + "/" + c[2]
top = cdir + "/" + c[3]
side = cdir + "/" + c[4]
# Top
os.system("convert " + chest_file + " \
\\( -clone 0 -crop " + str(CHPX2) + "x" + str(CHPX) + "+" + str(CHPX) + "+0 \\) -geometry +0+0 -composite -extent " + str(CHPX2) + "x" + str(CHPX) + " " + top)
# Front
# TODO: Add lock
os.system("convert " + chest_file + " \
\\( -clone 0 -crop " + str(CHPX2) + "x" + str(LIDPX) + "+" + str(CHPX) + "+" + str(CHPX) + " \\) -geometry +0+0 -composite \
\\( -clone 0 -crop " + str(CHPX2) + "x" + str(LIDLOW) + "+" + str(CHPX) + "+" + str(CHPX * 2 + LIDPX) + " \\) -geometry +0+" + str(LIDPX - PPX) + " -composite \
-extent " + str(CHPX2) + "x" + str(CHPX) + " " + front)
# Side
os.system("convert " + chest_file + " \
\\( -clone 0 -crop " + str(CHPX) + "x" + str(LIDPX) + "+" + str(0) + "+" + str(CHPX) + " \\) -geometry +0+0 -composite \
\\( -clone 0 -crop " + str(CHPX) + "x" + str(LIDLOW) + "+" + str(0) + "+" + str(CHPX * 2 + LIDPX) + " \\) -geometry +0+" + str(LIDPX - PPX) + " -composite \
-extent " + str(CHPX) + "x" + str(CHPX) + " " + side)
# Generate railway crossings and t-junctions
def convert_rail_textures(
make_texture_pack,
dry_run,
verbose,
base_dir,
tex_dir,
tempfile1,
tempfile2,
output_dir,
output_dir_name,
mineclone2_path,
PXSIZE):
# Generate railway crossings and t-junctions. Note: They may look strange.
# Note: these may be only a temporary solution, as crossings and t-junctions do not occour in MC.
# TODO: Curves
rails = [
# (Straigt src, curved src, t-junction dest, crossing dest)
("rail.png", "rail_corner.png",
"default_rail_t_junction.png", "default_rail_crossing.png"),
("powered_rail.png", "rail_corner.png",
"carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png"),
("powered_rail_on.png", "rail_corner.png", "mcl_minecarts_rail_golden_t_junction_powered.png",
"mcl_minecarts_rail_golden_crossing_powered.png"),
("detector_rail.png", "rail_corner.png", "mcl_minecarts_rail_detector_t_junction.png",
"mcl_minecarts_rail_detector_crossing.png"),
("detector_rail_on.png", "rail_corner.png", "mcl_minecarts_rail_detector_t_junction_powered.png",
"mcl_minecarts_rail_detector_crossing_powered.png"),
("activator_rail.png", "rail_corner.png", "mcl_minecarts_rail_activator_t_junction.png",
"mcl_minecarts_rail_activator_crossing.png"),
("activator_rail_on.png", "rail_corner.png", "mcl_minecarts_rail_activator_d_t_junction.png",
"mcl_minecarts_rail_activator_powered_crossing.png"),
]
for r in rails:
os.system(
"composite -compose Dst_Over " +
tex_dir +
"/block/" +
r[0] +
" " +
tex_dir +
"/block/" +
r[1] +
" " +
target_dir(
"/mods/ENTITIES/mcl_minecarts/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/" +
r[2])
os.system("convert " + tex_dir + "/block/" +
r[0] + " -rotate 90 " + tempfile1.name)
os.system(
"composite -compose Dst_Over " +
tempfile1.name +
" " +
tex_dir +
"/block/" +
r[0] +
" " +
target_dir(
"/mods/ENTITIES/mcl_minecarts/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/" +
r[3])
# Convert banner overlays
def convert_banner_overlays(
make_texture_pack,
dry_run,
verbose,
base_dir,
tex_dir,
tempfile1,
tempfile2,
output_dir,
output_dir_name,
mineclone2_path,
PXSIZE):
# Convert banner overlays
overlays = [
"base",
"border",
"bricks",
"circle",
"creeper",
"cross",
"curly_border",
"diagonal_left",
"diagonal_right",
"diagonal_up_left",
"diagonal_up_right",
"flower",
"gradient",
"gradient_up",
"half_horizontal_bottom",
"half_horizontal",
"half_vertical",
"half_vertical_right",
"rhombus",
"mojang",
"skull",
"small_stripes",
"straight_cross",
"stripe_bottom",
"stripe_center",
"stripe_downleft",
"stripe_downright",
"stripe_left",
"stripe_middle",
"stripe_right",
"stripe_top",
"square_bottom_left",
"square_bottom_right",
"square_top_left",
"square_top_right",
"triangle_bottom",
"triangles_bottom",
"triangle_top",
"triangles_top",
]
for o in overlays:
orig = tex_dir + "/entity/banner/" + o + ".png"
if os.path.isfile(orig):
if o == "mojang":
o = "thing"
dest = target_dir(
"/mods/ITEMS/mcl_banners/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) + "/" + "mcl_banners_" + o + ".png"
os.system(
"convert " +
orig +
" -transparent-color white -background black -alpha remove -alpha copy -channel RGB -white-threshold 0 " +
dest)
# Convert grass and related textures
def convert_grass_textures(
make_texture_pack,
dry_run,
verbose,
base_dir,
tex_dir,
tempfile1,
tempfile2,
output_dir,
output_dir_name,
mineclone2_path,
PXSIZE):
# Convert grass
grass_file = tex_dir + "/block/grass_block_top.png"
if os.path.isfile(grass_file):
FOLIAG = tex_dir + "/colormap/foliage.png"
GRASS = tex_dir + "/colormap/grass.png"
# Leaves
colorize_alpha(
FOLIAG,
tex_dir +
"/block/oak_leaves.png",
"116+143",
str(PXSIZE),
target_dir(
"/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/default_leaves.png",
tempfile2.name)
colorize_alpha(
FOLIAG,
tex_dir +
"/block/dark_oak_leaves.png",
"158+177",
str(PXSIZE),
target_dir(
"/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/mcl_core_leaves_big_oak.png",
tempfile2.name)
colorize_alpha(
FOLIAG,
tex_dir +
"/block/acacia_leaves.png",
"40+255",
str(PXSIZE),
target_dir(
"/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/default_acacia_leaves.png",
tempfile2.name)
colorize_alpha(
FOLIAG,
tex_dir +
"/block/spruce_leaves.png",
"226+230",
str(PXSIZE),
target_dir(
"/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/mcl_core_leaves_spruce.png",
tempfile2.name)
colorize_alpha(
FOLIAG,
tex_dir +
"/block/birch_leaves.png",
"141+186",
str(PXSIZE),
target_dir(
"/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/mcl_core_leaves_birch.png",
tempfile2.name)
colorize_alpha(
FOLIAG,
tex_dir +
"/block/jungle_leaves.png",
"16+39",
str(PXSIZE),
target_dir(
"/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/default_jungleleaves.png",
tempfile2.name)
# Waterlily
colorize_alpha(
FOLIAG,
tex_dir +
"/block/lily_pad.png",
"16+39",
str(PXSIZE),
target_dir(
"/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/flowers_waterlily.png",
tempfile2.name)
# Vines
colorize_alpha(
FOLIAG,
tex_dir +
"/block/vine.png",
"16+39",
str(PXSIZE),
target_dir(
"/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/mcl_core_vine.png",
tempfile2.name)
# Tall grass, fern (inventory images)
pcol = "50+173" # Plains grass color
# TODO: TALLGRASS.png does no longer exist
colorize_alpha(
GRASS,
tex_dir +
"/block/tallgrass.png",
pcol,
str(PXSIZE),
target_dir(
"/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/mcl_flowers_tallgrass_inv.png",
tempfile2.name)
colorize_alpha(
GRASS,
tex_dir +
"/block/fern.png",
pcol,
str(PXSIZE),
target_dir(
"/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/mcl_flowers_fern_inv.png",
tempfile2.name)
colorize_alpha(
GRASS,
tex_dir +
"/block/large_fern_top.png",
pcol,
str(PXSIZE),
target_dir(
"/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/mcl_flowers_double_plant_fern_inv.png",
tempfile2.name)
colorize_alpha(
GRASS,
tex_dir +
"/block/tall_grass_top.png",
pcol,
str(PXSIZE),
target_dir(
"/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) +
"/mcl_flowers_double_plant_grass_inv.png",
tempfile2.name)
# Convert grass palette: https://minecraft.fandom.com/wiki/Tint
grass_colors = [
# [Coords or #Color, AdditionalTint], # Index - Minecraft biome name (MineClone2 biome names)
# 0 - Plains (flat, Plains, Plains_beach, Plains_ocean, End)
["50+173"],
# 1 - Savanna (Savanna, Savanna_beach, Savanna_ocean)
["0+255"],
# 2 - Ice Spikes (IcePlainsSpikes, IcePlainsSpikes_ocean)
["255+255"],
# 3 - Snowy Taiga (ColdTaiga, ColdTaiga_beach, ColdTaiga_beach_water, ColdTaiga_ocean)
["255+255"],
# 4 - Giant Tree Taiga (MegaTaiga, MegaTaiga_ocean)
["178+193"],
# 5 - Giant Tree Taiga (MegaSpruceTaiga, MegaSpruceTaiga_ocean)
["178+193"],
# 6 - Montains (ExtremeHills, ExtremeHills_beach, ExtremeHills_ocean)
["203+239"],
# 7 - Montains (ExtremeHillsM, ExtremeHillsM_ocean)
["203+239"],
# 8 - Montains (ExtremeHills+, ExtremeHills+_snowtop, ExtremeHills+_ocean)
["203+239"],
["50+173"], # 9 - Beach (StoneBeach, StoneBeach_ocean)
["255+255"], # 10 - Snowy Tundra (IcePlains, IcePlains_ocean)
# 11 - Sunflower Plains (SunflowerPlains, SunflowerPlains_ocean)
["50+173"],
["191+203"], # 12 - Taiga (Taiga, Taiga_beach, Taiga_ocean)
["76+112"], # 13 - Forest (Forest, Forest_beach, Forest_ocean)
# 14 - Flower Forest (FlowerForest, FlowerForest_beach, FlowerForest_ocean)
["76+112"],
# 15 - Birch Forest (BirchForest, BirchForest_ocean)
["101+163"],
# 16 - Birch Forest Hills (BirchForestM, BirchForestM_ocean)
["101+163"],
# 17 - Desert and Nether (Desert, Desert_ocean, Nether)
["0+255"],
# 18 - Dark Forest (RoofedForest, RoofedForest_ocean)
["76+112", "#28340A"],
["#90814d"], # 19 - Mesa (Mesa, Mesa_sandlevel, Mesa_ocean, )
# 20 - Mesa (MesaBryce, MesaBryce_sandlevel, MesaBryce_ocean)
["#90814d"],
# 21 - Mesa (MesaPlateauF, MesaPlateauF_grasstop, MesaPlateauF_sandlevel, MesaPlateauF_ocean)
["#90814d"],
# 22 - Mesa (MesaPlateauFM, MesaPlateauFM_grasstop, MesaPlateauFM_sandlevel, MesaPlateauFM_ocean)
["#90814d"],
# 23 - Shattered Savanna (or Savanna Plateau ?) (SavannaM, SavannaM_ocean)
["0+255"],
["12+36"], # 24 - Jungle (Jungle, Jungle_shore, Jungle_ocean)
# 25 - Modified Jungle (JungleM, JungleM_shore, JungleM_ocean)
["12+36"],
["12+61"], # 26 - Jungle Edge (JungleEdge, JungleEdge_ocean)
# 27 - Modified Jungle Edge (JungleEdgeM, JungleEdgeM_ocean)
["12+61"],
# 28 - Swamp (Swampland, Swampland_shore, Swampland_ocean)
["#6A7039"],
# 29 - Mushroom Fields and Mushroom Field Shore (MushroomIsland, MushroomIslandShore, MushroomIsland_ocean)
["25+25"],
]
grass_palette_file = target_dir(
"/textures",
make_texture_pack,
output_dir,
output_dir_name,
mineclone2_path) + "/mcl_core_palette_grass.png"
os.system("convert -size 16x16 canvas:transparent " +
grass_palette_file)
for i, color in enumerate(grass_colors):
if color[0][0] == "#":
os.system("convert -size 1x1 xc:\"" +
color[0] + "\" " + tempfile1.name + ".png")
else:
os.system("convert " + GRASS + " -crop 1x1+" +
color[0] + " " + tempfile1.name + ".png")
if len(color) > 1:
os.system(
"convert " +
tempfile1.name +
".png \\( -size 1x1 xc:\"" +
color[1] +
"\" \\) -compose blend -define compose:args=50,50 -composite " +
tempfile1.name +
".png")
os.system("convert " +
grass_palette_file +
" \\( " +
tempfile1.name +
".png -geometry +" +
str(i %
16) +
"+" +
str(int(i /
16)) +
" \\) -composite " +
grass_palette_file)