Minecraft to Minetest texture converter

anatole
New member
 
Posts: 2
Joined: Fri Sep 30, 2011 22:55

Minecraft to Minetest texture converter

by anatole » Sat Oct 01, 2011 09:32

Hi! I wrote a Ruby script that converts textures from Minecraft to Minetest. Here it is:

Code: Select all
#!/usr/bin/env ruby

require 'RMagick'
require 'zip/zipfilesystem'

def image_from_archive archive, image_name
    blob = archive.file.read(image_name)
    terrain = Magick::ImageList.new
    terrain.from_blob(blob)
end


def cut image, size, table
    table.each do |current|
        x = size * current[0]
        y = size * current[1]
        tile = image.crop(x, y, size, size, true)
        tile.write current[2]
    end
end

def fix_greens
    files = ["grass.png", "grass_side.png"]
    files.each do |current|
        img = Magick::ImageList.new(current)
        img = img.colorize(0.6, 0.6, 0.6, "#003F00")
        img.write(current)
    end
    img = Magick::ImageList.new("leaves.png")
    img = img.colorize(0.8, 0.8, 0.8, "#003F00")
    img.write("leaves.png")
end

def generate_rails size
    straight = Magick::ImageList.new("rail.png")
    curved = Magick::ImageList.new("rail_curved.png")

    tile = straight.composite(curved, 0, 0, Magick::OverCompositeOp)
    tile.write("rail_t_junction.png")

    horizontal = straight.rotate(90)
    tile = straight.composite(horizontal, 0, 0, Magick::OverCompositeOp)
    tile.write("rail_crossing.png")
end

def extract_crack terrain
    size = terrain.rows / 16
    nstages = 5
    crack = Magick::Image.new(size, size * nstages) {
        self.background_color = "#00000000"
    }
    selected_stages = [2, 3, 5, 6, 9]
    nstages.times do |stage_number|
        x = selected_stages[stage_number] * size
        y = 15 * size
        tile = terrain.crop(x, y, size, size, true)

        x = 0
        y = stage_number * size
        crack.composite!(tile, x, y, Magick::CopyCompositeOp)
    end
    crack.write("crack.png")
end

terrain_table = [
    [3, 2, "bookshelf.png"],
    [7, 0, "brick.png"],
    [6, 4, "cactus_side.png"],
    [5, 4, "cactus_top.png"],
    [11, 1, "chest_front.png"],
    [10, 1, "chest_side.png"],
    [9, 1, "chest_top.png"],
    [8, 4, "clay.png"],
    [6, 1, "cloud.png"],
    [0, 1, "cobble.png"],
    [12, 2, "furnace_front.png"],
    [14, 3, "furnace_side.png"],
    [1, 3, "glass.png"],
    [0, 0, "grass.png"],
    [6, 2, "grass_side.png"],
    [3, 1, "gravel.png"],
    [3, 5, "ladder.png"],
    [15, 15, "lava.png"],
    [4, 3, "leaves.png"],
    [2, 2, "mineral_coal.png"],
    [1, 2, "mineral_iron.png"],
    [2, 0, "mud.png"],
    [4, 2, "mossycobble.png"],
    [0, 7, "rail_curved.png"],
    [0, 8, "rail.png"],
    [2, 1, "sand.png"],
    [0, 13, "sandstone.png"],
    [6, 1, "steel_block.png"],
    [1, 0, "stone.png"],
    [4, 1, "tree.png"],
    [5, 1, "tree_top.png"],
    [4, 0, "wood.png"],
    [15, 13, "water.png"],
]

items_table = [
    [10, 0, "apple.png"],
    [11, 3, "book.png"],
    [6, 1, "clay_brick.png"],
    [9, 3, "lump_of_clay.png"],
    [7, 0, "lump_of_coal.png"],
    [10, 3, "paper.png"],
    [7, 1, "steel_ingot.png"],
    [5, 3, "stick.png"],
    [4, 6, "tool_mesepick.png"],
    [2, 7, "tool_steelaxe.png"],
    [2, 6, "tool_steelpick.png"],
    [2, 5, "tool_steelshovel.png"],
    [2, 4, "tool_steelsword.png"],
    [1, 7, "tool_stoneaxe.png"],
    [1, 6, "tool_stonepick.png"],
    [1, 5, "tool_stoneshovel.png"],
    [1, 4, "tool_stonesword.png"],
    [0, 7, "tool_woodaxe.png"],
    [0, 6, "tool_woodpick.png"],
    [0, 5, "tool_woodshovel.png"],
    [0, 4, "tool_woodsword.png"],
]

def usage
    puts "Usaage: #{__FILE__} <zipfile> [directory]"
end

if (ARGV.count == 0 || ARGV.count > 2)
    usage
    exit
end


Zip::ZipFile.open(ARGV[0]) do |pack|
    Dir.chdir ARGV[1] if ARGV[1]
    terrain = image_from_archive(pack, "terrain.png")
    size = terrain.rows / 16
    cut(terrain, size, terrain_table)
    extract_crack(terrain)
    fix_greens
    generate_rails(size)

    items = image_from_archive(pack, "gui/items.png")
    cut(items, items.rows / 16, items_table)

    icons = image_from_archive(pack, "gui/icons.png")
    scale = icons.rows / 256
    tile = icons.crop(scale * (16 + 4*9), 0, scale * 9, scale * 9, true)
    tile.write("heart.png")
end



You should install RMagick and rubyzip to use it.

It must work with any texturepack, howerer there are some problems with transparency.

Here is a list of what does not work:
  • I don't know how to properly colorize the grass and leaves
  • With the default texturepack (minecraft.jar) cracking texture (crack.png) makes the block completely transparent but with other texturepacks it works right
  • To make crossing rails texture i combined two others and it looks ugly
  • Fences and signes don't convert
 

User avatar
sdzen
Member
 
Posts: 1170
Joined: Fri Aug 05, 2011 22:33
Location: Paradise (your not allowed)

by sdzen » Sat Oct 01, 2011 11:28

sounds like the texture transformer thats used in manic digger and i don't believe that you need to contact the owner if your not distributing the texture pack but i could be wrong otherwise great job :)
[h]Zen S.D.[/h] The next generation of tranquility!
malheureusement mon français n'est pas bon :<
Owner of the Zelo's
In game name: MuadTralk, spdtainted, sdzen, sd zen, sdzeno
 

anatole
New member
 
Posts: 2
Joined: Fri Sep 30, 2011 22:55

by anatole » Sat Oct 01, 2011 13:01

Yes, this script just cuts a large source texturepack into many small files used by Minetest and all copyrights belong to authors of this texturepack.
 

User avatar
Calinou
Moderator
 
Posts: 3156
Joined: Mon Aug 01, 2011 14:26
Location: Troyes, France
GitHub: Calinou
IRC: Calinou
In-game: Calinou

by Calinou » Sat Oct 01, 2011 17:52

I just converted a pack by hand a few weeks ago... :(
Still nice.
 

User avatar
IPushButton2653
Member
 
Posts: 666
Joined: Wed Nov 16, 2011 22:47
Location: Mississippi

by IPushButton2653 » Thu Jan 26, 2012 02:26

I know this is out-of-date, but maybe it can help ease the tension in transferring a whole pack.
 

User avatar
sdzen
Member
 
Posts: 1170
Joined: Fri Aug 05, 2011 22:33
Location: Paradise (your not allowed)

by sdzen » Sun Feb 12, 2012 12:50

Code: Select all
#!/usr/bin/env ruby

require 'RMagick'
require 'zip/zipfilesystem'

def image_from_archive archive, image_name
    blob = archive.file.read(image_name)
    terrain = Magick::ImageList.new
    terrain.from_blob(blob)
end


def cut image, size, table
    table.each do |current|
        x = size * current[0]
        y = size * current[1]
        tile = image.crop(x, y, size, size, true)
        tile.write current[2]
    end
end

def fix_greens
    files = ["default_grass.png", "default_grass_side.png"]
    files.each do |current|
        img = Magick::ImageList.new(current)
        img = img.colorize(0.6, 0.6, 0.6, "#003F00")
        img.write(current)
    end
    img = Magick::ImageList.new("default_leaves.png")
    img = img.colorize(0.8, 0.8, 0.8, "#003F00")
    img.write("leaves.png")
end

def generate_rails size
    straight = Magick::ImageList.new("default_rail.png")
    curved = Magick::ImageList.new("default_rail_curved.png")

    tile = straight.composite(curved, 0, 0, Magick::OverCompositeOp)
    tile.write("default_rail_t_junction.png")

    horizontal = straight.rotate(90)
    tile = straight.composite(horizontal, 0, 0, Magick::OverCompositeOp)
    tile.write("default_rail_crossing.png")
end

def extract_crack terrain
    size = terrain.rows / 16
    nstages = 5
    crack = Magick::Image.new(size, size * nstages) {
        self.background_color = "#00000000"
    }
    selected_stages = [2, 3, 5, 6, 9]
    nstages.times do |stage_number|
        x = selected_stages[stage_number] * size
        y = 15 * size
        tile = terrain.crop(x, y, size, size, true)

        x = 0
        y = stage_number * size
        crack.composite!(tile, x, y, Magick::CopyCompositeOp)
    end
    crack.write("default_crack.png")
end

terrain_table = [
    [3, 2, "default_bookshelf.png"],
    [7, 0, "default_brick.png"],
    [6, 4, "default_cactus_side.png"],
    [5, 4, "default_cactus_top.png"],
    [11, 1, "default_chest_front.png"],
    [10, 1, "default_chest_side.png"],
    [9, 1, "default_chest_top.png"],
    [8, 4, "default_clay.png"],
    [6, 1, "default_cloud.png"],
    [0, 1, "default_cobble.png"],
    [12, 2, "default_furnace_front.png"],
    [14, 3, "default_furnace_side.png"],
    [1, 3, "default_glass.png"],
    [0, 0, "default_grass.png"],
    [6, 2, "default_grass_side.png"],
    [3, 1, "default_gravel.png"],
    [3, 5, "default_ladder.png"],
    [15, 15, "default_lava.png"],
    [4, 3, "default_leaves.png"],
    [2, 2, "mineral_coal.png"],
    [1, 2, "mineral_iron.png"],
    [2, 0, "default_mud.png"],
    [4, 2, "default_mossycobble.png"],
    [0, 7, "default_rail_curved.png"],
    [0, 8, "default_rail.png"],
    [2, 1, "default_sand.png"],
    [0, 13, "default_sandstone.png"],
    [6, 1, "default_steel_block.png"],
    [1, 0, "default_stone.png"],
    [4, 1, "default_tree.png"],
    [5, 1, "default_tree_top.png"],
    [4, 0, "default_wood.png"],
    [15, 13, "default_water.png"],
]

items_table = [
    [10, 0, "default_apple.png"],
    [11, 3, "default_book.png"],
    [6, 1, "default_clay_brick.png"],
    [9, 3, "default_clay_lump.png"],
    [7, 0, "default_coal_lump.png"],
    [10, 3, "default_paper.png"],
    [7, 1, "default_steel_ingot.png"],
    [5, 3, "default_stick.png"],
    [4, 6, "default_tool_mesepick.png"],
    [2, 7, "default_tool_steelaxe.png"],
    [2, 6, "default_tool_steelpick.png"],
    [2, 5, "default_tool_steelshovel.png"],
    [2, 4, "default_tool_steelsword.png"],
    [1, 7, "default_tool_stoneaxe.png"],
    [1, 6, "default_tool_stonepick.png"],
    [1, 5, "default_tool_stoneshovel.png"],
    [1, 4, "default_tool_stonesword.png"],
    [0, 7, "default_tool_woodaxe.png"],
    [0, 6, "default_tool_woodpick.png"],
    [0, 5, "default_tool_woodshovel.png"],
    [0, 4, "default_tool_woodsword.png"],
]

def usage
    puts "Usaage: #{__FILE__} <zipfile> [directory]"
end

if (ARGV.count == 0 || ARGV.count > 2)
    usage
    exit
end


Zip::ZipFile.open(ARGV[0]) do |pack|
    Dir.chdir ARGV[1] if ARGV[1]
    terrain = image_from_archive(pack, "terrain.png")
    size = terrain.rows / 16
    cut(terrain, size, terrain_table)
    extract_crack(terrain)
    fix_greens
    generate_rails(size)

    items = image_from_archive(pack, "gui/items.png")
    cut(items, items.rows / 16, items_table)

    icons = image_from_archive(pack, "gui/icons.png")
    scale = icons.rows / 256
    tile = icons.crop(scale * (16 + 4*9), 0, scale * 9, scale * 9, true)
    tile.write("heart.png")
end

I changed the texture names
[h]Zen S.D.[/h] The next generation of tranquility!
malheureusement mon français n'est pas bon :<
Owner of the Zelo's
In game name: MuadTralk, spdtainted, sdzen, sd zen, sdzeno
 

User avatar
RAPHAEL
Member
 
Posts: 627
Joined: Tue Nov 01, 2011 09:09
Location: Earth

by RAPHAEL » Tue Feb 14, 2012 12:27

sdzen wrote:
Code: Select all
#!/usr/bin/env ruby

require 'RMagick'
require 'zip/zipfilesystem'

def image_from_archive archive, image_name
    blob = archive.file.read(image_name)
    terrain = Magick::ImageList.new
    terrain.from_blob(blob)
end


def cut image, size, table
    table.each do |current|
        x = size * current[0]
        y = size * current[1]
        tile = image.crop(x, y, size, size, true)
        tile.write current[2]
    end
end

def fix_greens
    files = ["default_grass.png", "default_grass_side.png"]
    files.each do |current|
        img = Magick::ImageList.new(current)
        img = img.colorize(0.6, 0.6, 0.6, "#003F00")
        img.write(current)
    end
    img = Magick::ImageList.new("default_leaves.png")
    img = img.colorize(0.8, 0.8, 0.8, "#003F00")
    img.write("leaves.png")
end

def generate_rails size
    straight = Magick::ImageList.new("default_rail.png")
    curved = Magick::ImageList.new("default_rail_curved.png")

    tile = straight.composite(curved, 0, 0, Magick::OverCompositeOp)
    tile.write("default_rail_t_junction.png")

    horizontal = straight.rotate(90)
    tile = straight.composite(horizontal, 0, 0, Magick::OverCompositeOp)
    tile.write("default_rail_crossing.png")
end

def extract_crack terrain
    size = terrain.rows / 16
    nstages = 5
    crack = Magick::Image.new(size, size * nstages) {
        self.background_color = "#00000000"
    }
    selected_stages = [2, 3, 5, 6, 9]
    nstages.times do |stage_number|
        x = selected_stages[stage_number] * size
        y = 15 * size
        tile = terrain.crop(x, y, size, size, true)

        x = 0
        y = stage_number * size
        crack.composite!(tile, x, y, Magick::CopyCompositeOp)
    end
    crack.write("default_crack.png")
end

terrain_table = [
    [3, 2, "default_bookshelf.png"],
    [7, 0, "default_brick.png"],
    [6, 4, "default_cactus_side.png"],
    [5, 4, "default_cactus_top.png"],
    [11, 1, "default_chest_front.png"],
    [10, 1, "default_chest_side.png"],
    [9, 1, "default_chest_top.png"],
    [8, 4, "default_clay.png"],
    [6, 1, "default_cloud.png"],
    [0, 1, "default_cobble.png"],
    [12, 2, "default_furnace_front.png"],
    [14, 3, "default_furnace_side.png"],
    [1, 3, "default_glass.png"],
    [0, 0, "default_grass.png"],
    [6, 2, "default_grass_side.png"],
    [3, 1, "default_gravel.png"],
    [3, 5, "default_ladder.png"],
    [15, 15, "default_lava.png"],
    [4, 3, "default_leaves.png"],
    [2, 2, "mineral_coal.png"],
    [1, 2, "mineral_iron.png"],
    [2, 0, "default_mud.png"],
    [4, 2, "default_mossycobble.png"],
    [0, 7, "default_rail_curved.png"],
    [0, 8, "default_rail.png"],
    [2, 1, "default_sand.png"],
    [0, 13, "default_sandstone.png"],
    [6, 1, "default_steel_block.png"],
    [1, 0, "default_stone.png"],
    [4, 1, "default_tree.png"],
    [5, 1, "default_tree_top.png"],
    [4, 0, "default_wood.png"],
    [15, 13, "default_water.png"],
]

items_table = [
    [10, 0, "default_apple.png"],
    [11, 3, "default_book.png"],
    [6, 1, "default_clay_brick.png"],
    [9, 3, "default_clay_lump.png"],
    [7, 0, "default_coal_lump.png"],
    [10, 3, "default_paper.png"],
    [7, 1, "default_steel_ingot.png"],
    [5, 3, "default_stick.png"],
    [4, 6, "default_tool_mesepick.png"],
    [2, 7, "default_tool_steelaxe.png"],
    [2, 6, "default_tool_steelpick.png"],
    [2, 5, "default_tool_steelshovel.png"],
    [2, 4, "default_tool_steelsword.png"],
    [1, 7, "default_tool_stoneaxe.png"],
    [1, 6, "default_tool_stonepick.png"],
    [1, 5, "default_tool_stoneshovel.png"],
    [1, 4, "default_tool_stonesword.png"],
    [0, 7, "default_tool_woodaxe.png"],
    [0, 6, "default_tool_woodpick.png"],
    [0, 5, "default_tool_woodshovel.png"],
    [0, 4, "default_tool_woodsword.png"],
]

def usage
    puts "Usaage: #{__FILE__} <zipfile> [directory]"
end

if (ARGV.count == 0 || ARGV.count > 2)
    usage
    exit
end


Zip::ZipFile.open(ARGV[0]) do |pack|
    Dir.chdir ARGV[1] if ARGV[1]
    terrain = image_from_archive(pack, "terrain.png")
    size = terrain.rows / 16
    cut(terrain, size, terrain_table)
    extract_crack(terrain)
    fix_greens
    generate_rails(size)

    items = image_from_archive(pack, "gui/items.png")
    cut(items, items.rows / 16, items_table)

    icons = image_from_archive(pack, "gui/icons.png")
    scale = icons.rows / 256
    tile = icons.crop(scale * (16 + 4*9), 0, scale * 9, scale * 9, true)
    tile.write("heart.png")
end

I changed the texture names

So.. how to use this? I've been attempting to use this for a couple hours now and get nowhere.

When trying to run it I get:
"./convert.rb:4:in `require': no such file to load -- zip/zipfilesystem (LoadError)
from ./convert.rb:4"
I can't seem to find any way to "fix" this (not used to Ruby). Running on an Ubuntu based distro.
"Before you speak, ask yourself: Is it kind, is it true, is it necessary, does it improve upon the silence?"
My mods: http://goo.gl/n4kpn
(Currently Various, Industrial, Fakeblocks, Jail, MoarCraft, Christmas, Replicator, minetest dev installer for linux, bash mod installer, windows mod installer)
 

User avatar
sdzen
Member
 
Posts: 1170
Joined: Fri Aug 05, 2011 22:33
Location: Paradise (your not allowed)

by sdzen » Tue Feb 14, 2012 21:51

neither am I i just changed the texture names for most recent version it appears that it divides the file into sections and names them accordingly
[h]Zen S.D.[/h] The next generation of tranquility!
malheureusement mon français n'est pas bon :<
Owner of the Zelo's
In game name: MuadTralk, spdtainted, sdzen, sd zen, sdzeno
 

MikoMiko
Member
 
Posts: 16
Joined: Sun Apr 08, 2012 17:41

by MikoMiko » Mon May 21, 2012 18:47

I've made a couple of small additions to this script, namely it will know always output the colorized leaves as "default_leaves.png" instead of just "leaves.png" and it will create a "default_dirt.png" which it wasn't before. It would be really great if someone who is better at Ruby then I am could modify this script to extract wool, bucket, and stonebrick textures from a Minecraft texture pack so it would be easy to use generated textures with mods too.

Code: Select all
#!/bin/env ruby
require 'rubygems'
require 'RMagick'
require 'zip/zipfilesystem'

def image_from_archive archive, image_name
    blob = archive.file.read(image_name)
    terrain = Magick::ImageList.new
    terrain.from_blob(blob)
end


def cut image, size, table
    table.each do |current|
        x = size * current[0]
        y = size * current[1]
        tile = image.crop(x, y, size, size, true)
        tile.write current[2]
    end
end

def fix_greens
    files = ["default_grass.png", "default_grass_side.png"]
    files.each do |current|
        img = Magick::ImageList.new(current)
        img = img.colorize(0.6, 0.6, 0.6, "#003F00")
        img.write(current)
    end
    img = Magick::ImageList.new("default_leaves.png")
    img = img.colorize(0.8, 0.8, 0.8, "#003F00")
    img.write("default_leaves.png")
end

def generate_rails size
    straight = Magick::ImageList.new("default_rail.png")
    curved = Magick::ImageList.new("default_rail_curved.png")

    tile = straight.composite(curved, 0, 0, Magick::OverCompositeOp)
    tile.write("default_rail_t_junction.png")

    horizontal = straight.rotate(90)
    tile = straight.composite(horizontal, 0, 0, Magick::OverCompositeOp)
    tile.write("default_rail_crossing.png")
end

def extract_crack terrain
    size = terrain.rows / 16
    nstages = 5
    crack = Magick::Image.new(size, size * nstages) {
        self.background_color = "#00000000"
    }
    selected_stages = [2, 3, 5, 6, 9]
    nstages.times do |stage_number|
        x = selected_stages[stage_number] * size
        y = 15 * size
        tile = terrain.crop(x, y, size, size, true)

        x = 0
        y = stage_number * size
        crack.composite!(tile, x, y, Magick::CopyCompositeOp)
    end
    crack.write("default_crack.png")
end

terrain_table = [
    [3, 2, "default_bookshelf.png"],
    [7, 0, "default_brick.png"],
    [6, 4, "default_cactus_side.png"],
    [5, 4, "default_cactus_top.png"],
    [11, 1, "default_chest_front.png"],
    [10, 1, "default_chest_side.png"],
    [9, 1, "default_chest_top.png"],
    [8, 4, "default_clay.png"],
    [6, 1, "default_cloud.png"],
    [0, 1, "default_cobble.png"],
    [12, 2, "default_furnace_front.png"],
    [14, 3, "default_furnace_side.png"],
    [1, 3, "default_glass.png"],
    [0, 0, "default_grass.png"],
    [6, 2, "default_grass_side.png"],
    [3, 1, "default_gravel.png"],
    [3, 5, "default_ladder.png"],
    [15, 15, "default_lava.png"],
    [4, 3, "default_leaves.png"],
    [2, 2, "mineral_coal.png"],
    [1, 2, "mineral_iron.png"],
    [2, 0, "default_mud.png"],
    [2, 0, "default_dirt.png"],
    [4, 2, "default_mossycobble.png"],
    [0, 7, "default_rail_curved.png"],
    [0, 8, "default_rail.png"],
    [2, 1, "default_sand.png"],
    [0, 13, "default_sandstone.png"],
    [6, 1, "default_steel_block.png"],
    [1, 0, "default_stone.png"],
    [4, 1, "default_tree.png"],
    [5, 1, "default_tree_top.png"],
    [4, 0, "default_wood.png"],
    [15, 13, "default_water.png"],
]

items_table = [
    [10, 0, "default_apple.png"],
    [11, 3, "default_book.png"],
    [6, 1, "default_clay_brick.png"],
    [9, 3, "default_clay_lump.png"],
    [7, 0, "default_coal_lump.png"],
    [10, 3, "default_paper.png"],
    [7, 1, "default_steel_ingot.png"],
    [5, 3, "default_stick.png"],
    [4, 6, "default_tool_mesepick.png"],
    [2, 7, "default_tool_steelaxe.png"],
    [2, 6, "default_tool_steelpick.png"],
    [2, 5, "default_tool_steelshovel.png"],
    [2, 4, "default_tool_steelsword.png"],
    [1, 7, "default_tool_stoneaxe.png"],
    [1, 6, "default_tool_stonepick.png"],
    [1, 5, "default_tool_stoneshovel.png"],
    [1, 4, "default_tool_stonesword.png"],
    [0, 7, "default_tool_woodaxe.png"],
    [0, 6, "default_tool_woodpick.png"],
    [0, 5, "default_tool_woodshovel.png"],
    [0, 4, "default_tool_woodsword.png"],
]

def usage
    puts "Usaage: #{__FILE__} <zipfile> [directory]"
end

if (ARGV.count == 0 || ARGV.count > 2)
    usage
    exit
end


Zip::ZipFile.open(ARGV[0]) do |pack|
    Dir.chdir ARGV[1] if ARGV[1]
    terrain = image_from_archive(pack, "terrain.png")
    size = terrain.rows / 16
    cut(terrain, size, terrain_table)
    extract_crack(terrain)
    fix_greens
    generate_rails(size)

    items = image_from_archive(pack, "gui/items.png")
    cut(items, items.rows / 16, items_table)

    icons = image_from_archive(pack, "gui/icons.png")
    scale = icons.rows / 256
    tile = icons.crop(scale * (16 + 4*9), 0, scale * 9, scale * 9, true)
    tile.write("heart.png")
end
 

MikoMiko
Member
 
Posts: 16
Joined: Sun Apr 08, 2012 17:41

by MikoMiko » Mon May 21, 2012 21:01

Okay, adding support for bucket and wool textures was a lot easier than I thought it would be once I realized this script split up terrain.png and items.png into grids. I've taken the liberty of throwing the script up on GitHub to make it easier to share and for other people to add to it.
https://github.com/TacticalGenius/TexturePackConverter

If you have any ideas for additions or find any bugs please post here or on GitHub.
Last edited by MikoMiko on Mon May 21, 2012 21:10, edited 1 time in total.
 

MikoMiko
Member
 
Posts: 16
Joined: Sun Apr 08, 2012 17:41

by MikoMiko » Tue Nov 27, 2012 07:13

Just thought I would pop in to bump this since I've been working on the script again and updating it to make textures for some of the stuff that's been added to minetest since I lost interest in it a while ago. As usual, if you have any suggestions or are having a problem post here or open an issue on GitHub.
 


Return to Texture Packs



Who is online

Users browsing this forum: No registered users and 2 guests